SUBSIM Radio Room Forums



SUBSIM: The Web's #1 resource for all submarine & naval simulations since 1997

Go Back   SUBSIM Radio Room Forums > Silent Hunter 3 - 4 - 5 > SH4 Mods Workshop
Forget password? Reset here

Reply
 
Thread Tools Display Modes
Old 02-01-19, 09:54 AM   #1
Jeff-Groves
GLOBAL MODDING TERRORIST
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,654
Downloads: 137
Uploads: 0


Default

It's a problem with floats.
From Graeme at SweetScape............

"The error you are seeing is caused because 'float' is not very accurate for doing a lot of computations. We tried your function in C++ and it gives the same issue. 'float' is just not very accurate and if you switch to 'double' it will be better, although double has accuracy issues as well for lots of computations."

Then next section (Faces) uses all ints so shouldn't have a problem.


One thing I am doing is writing separate scripts for each part.
Verts, Vertical Textures, Faces are all separate scripts.
Makes catching errors easier.
The 1st script calls the next 2 in order just as if it was all one script.
Jeff-Groves is offline   Reply With Quote
Old 02-01-19, 11:27 AM   #2
Jeff-Groves
GLOBAL MODDING TERRORIST
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,654
Downloads: 137
Uploads: 0


Default

How to code the faces output.
Given there are 10000 faces? Each line must follow the formula below.
The loop will be slow but should work.
This is NOT actual code but gives the information to code the needed loop.

---C1------ C2------ C3---- C4
f 1/101 102/100 103/201 2/202
f 2/202 103/201 104/302 3/303

C1 = +1/+101
C2 = +1/+101
C3 = +1/+101
C4 = +1/+101

Last edited by Jeff-Groves; 02-01-19 at 11:46 AM.
Jeff-Groves is offline   Reply With Quote
Old 02-01-19, 12:09 PM   #3
Jeff-Groves
GLOBAL MODDING TERRORIST
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,654
Downloads: 137
Uploads: 0


Default

At first look you may think we need a double loop like for the Textures.
Actually a single loop will work for our needs so speed goes up.

Look close at the faces ints and the pattern.
You may think 8 ints are needed.
Jeff-Groves is offline   Reply With Quote
Old 02-01-19, 12:19 PM   #4
propbeanie
CTD - it's not just a job
 
propbeanie's Avatar
 
Join Date: May 2016
Location: One hour from Music City USA!
Posts: 10,100
Downloads: 451
Uploads: 2


Default

Quote:
Originally Posted by Jeff-Groves View Post
It's a problem with floats.
From Graeme at SweetScape............

"The error you are seeing is caused because 'float' is not very accurate for doing a lot of computations. We tried your function in C++ and it gives the same issue. 'float' is just not very accurate and if you switch to 'double' it will be better, although double has accuracy issues as well for lots of computations."
...
Thanks for that Jeff
__________________

"...and bollocks to the naysayers" - Jimbuna
propbeanie is offline   Reply With Quote
Old 02-01-19, 12:31 PM   #5
Jeff-Groves
GLOBAL MODDING TERRORIST
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,654
Downloads: 137
Uploads: 0


Default

The support from SweetScape is one big reason I pay to stay updated.
Jeff-Groves is offline   Reply With Quote
Old 02-01-19, 12:50 PM   #6
Jeff-Groves
GLOBAL MODDING TERRORIST
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,654
Downloads: 137
Uploads: 0


Default

Have you figured out the loop needed to output 10000 faces yet?
And the MINIMUM number of ints needed to do it?


If your answer is above 3 ints?

Your wrong!

Last edited by Jeff-Groves; 02-01-19 at 01:01 PM.
Jeff-Groves is offline   Reply With Quote
Old 02-01-19, 02:16 PM   #7
propbeanie
CTD - it's not just a job
 
propbeanie's Avatar
 
Join Date: May 2016
Location: One hour from Music City USA!
Posts: 10,100
Downloads: 451
Uploads: 2


Default

Is there a way to do like a "Do Loop Until EOF"?
__________________

"...and bollocks to the naysayers" - Jimbuna
propbeanie is offline   Reply With Quote
Old 02-01-19, 02:29 PM   #8
Jeff-Groves
GLOBAL MODDING TERRORIST
 
Jeff-Groves's Avatar
 
Join Date: Sep 2014
Posts: 5,654
Downloads: 137
Uploads: 0


Default

We only need one looping function to do everything.
I have 3 ints assigned in my loop right now.
2 only control the number of loops I do.
The other is for kicking out the faces information.
I take advantage of the Printf function to do the math.


Here's an example..............

f=(f+1);
Printf("f %u", f);
Printf( "/%u ", f=(f+100) );

Those lines print out 1/101
That's the first part of a face.

Each line of Printf needs to be coded or numbers go real FUBAR!
What I mean by that is that using f on a single line in Printf can corrupt the data.
By using different lines? It preserves the true value of f for further math.
BUT! We can loop the code to print out all 10000 lines easily.

Last edited by Jeff-Groves; 02-01-19 at 02:47 PM.
Jeff-Groves is offline   Reply With Quote
Old 02-01-19, 02:52 PM   #9
propbeanie
CTD - it's not just a job
 
propbeanie's Avatar
 
Join Date: May 2016
Location: One hour from Music City USA!
Posts: 10,100
Downloads: 451
Uploads: 2


Default

Nice. I keep confusing "program code" and "scripting"... In other words, I want to write an application in one fell swoop. You're getting the data and its structure, to be used in an app... baby steps. must take baby steps pb...
__________________

"...and bollocks to the naysayers" - Jimbuna
propbeanie is offline   Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -5. The time now is 04:08 PM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 1995- 2025 Subsim®
"Subsim" is a registered trademark, all rights reserved.