3D subtraction of parts ...

Everything related to 3D programming
pjay
Enthusiast
Enthusiast
Posts: 251
Joined: Thu Mar 30, 2006 11:14 am

Re: 3D subtraction of parts ...

Post by pjay »

The function I mentioned previously was just a mesh function to create a cylinder, so wasn't useful really.

I did, however, take a moment to knock up a small standalone example that demonstrates the principal:

Image

Code: Select all

;/ opengl swept surface - Phil James 11/2024
; 'Lathe' function converted from: https://stackoverflow.com/questions/7904281/opengl-rotate-a-curve-about-the-y-axis
; LMB to adjust profile (holding LMB Or clicking LMB results in two different modes)
; RMB to rotate model 

EnableExplicit

#Width = 1024 : #Height = 768
#Slices = 48 ; how many rotations for a full revolution, the larger the finer the model, slower to calculate & render (96 looks smooth)
#Points = 1024 : #ScaleY = 0.03 ; you can increase the horizontal resolution here (adjust scale to better fit screen)

Enumeration ; window
  #myWin_Main
EndEnumeration
Enumeration ; gadgets
  #myGad_GL
  #myGad_Button_Smooth
  #myGad_Checkbox_AutoSmooth
EndEnumeration
Enumeration ; timer
  #myTimer_Render
EndEnumeration

Structure sVec2f : x.f : y.f : EndStructure
Structure sVec3f : x.f : y.f : z.f : EndStructure
Structure sVertex : position.sVec3f : Normal.sVec3f : EndStructure
Structure sSystem
  Event.i : Exit.i
  LMB.i : RMB.I
  Rotation.svec3f
  Render.i : UpdateProfile.i
  Mouse.point : MouseOld.point
EndStructure

Global Dim model.sVertex(32)
Global Dim Points.sVec2f(#Points)
Global Dim Profile.f(#Points)
Global System.sSystem

;/ normal calculation for correct lighting
Macro Vec3f_Subtract(n, v, w)
  n\x = v\x - w\x
  n\y = v\y - w\y
  n\z = v\z - w\z
EndMacro
Procedure Normalize(*V.sVec3f)
  Define.d magSq, oneOverMag
  magSq = *V\x * *V\x + *V\y * *V\y + *V\z * *V\z
  If magsq > 0
    oneOverMag = 1.0 / Sqr(magSq)
    *V\x * oneOverMag
    *V\y * oneOverMag
    *V\z * oneOverMag
  EndIf 
EndProcedure
Procedure NormalFace(*n.sVec3f, *v1.sVec3f, *v2.sVec3f, *v3.sVec3f)
  Protected.sVec3f v2v1, v3v1
  Vec3f_Subtract(v2v1, *v2, *v1)
  Vec3f_Subtract(v3v1, *v3, *v1)
  *n\x = v2v1\y * v3v1\z - v2v1\z * v3v1\y
  *n\y = v2v1\z * v3v1\x - v2v1\x * v3v1\z
  *n\z = v2v1\x * v3v1\y - v2v1\y * v3v1\x
  Normalize(*n)
EndProcedure

Procedure Lathe(Array points.sVec2f(1), segments = 32)
  Protected onPoint = 0, time = ElapsedMilliseconds(), i, j, angle.f, ptSize, normal.svec3f  
  
  ; precalculate circle points
  Dim circlePts.sVec2f(segments)
  For i = 0 To segments
    angle = (i / segments) * #PI * 2.0
    circlePts(i)\x = Cos(angle) : circlePts(i)\y = Sin(angle)
  Next
  
  ; fill each layer
  ptSize = ArraySize(points(), 1)   
  Dim layers.sVec3f(ptSize, segments)
  
  For i = 0 To ptSize
    For j = 0 To segments
      layers(i, j)\x = circlePts(j)\x * points(i)\x
      layers(i, j)\y = circlePts(j)\y * points(i)\x
      layers(i, j)\z = points(i)\y
    Next
  Next
  
  ; move through layers generating triangles
  Dim Model.sVertex(ptSize * segments * 6)
  For i = 1 To ptSize
    For j = 1 To segments
      NormalFace(normal, @layers(i-1, j-1), @layers(i, j), @layers(i, j-1))
      Model(onPoint + 0)\position = layers(i-1, j-1)
      Model(onPoint + 1)\position = layers(i, j)
      Model(onPoint + 2)\position = layers(i, j-1)
      Model(onPoint + 0)\Normal = normal : Model(onPoint + 1)\Normal = normal : Model(onPoint + 2)\Normal = normal
      NormalFace(normal, @layers(i-1, j-1), @layers(i-1, j), @layers(i, j))
      Model(onPoint + 3)\position = layers(i - 1, j - 1)
      Model(onPoint + 4)\position = layers(i-1, j)
      Model(onPoint + 5)\position = layers(i, j)
      Model(onPoint + 3)\Normal = normal : Model(onPoint + 4)\Normal = normal : Model(onPoint + 5)\Normal = normal
      onPoint + 6
    Next
  Next
  
  SetWindowTitle(#myWin_Main, "Model calculation time: "+Str(ElapsedMilliseconds() - time)+"ms")
EndProcedure

Procedure Profile_SetHeight(pos, Val)
  Static lastVal, lastPos
  If val > 300 : ProcedureReturn : EndIf ; prevent setting too far outside of draw area
  Protected x, valChg.f, lp.f
  If val < 0 : val = 0 : ElseIf val > 256 : val = 256 : EndIf 
  If lastPos < Pos
    For x = lastPos To pos
      If x => 0 And x < #Points-1 : profile(x) = val : EndIf
    Next
  Else
    For x = Pos To lastPos
      If x => 0 And x < #Points-1 : profile(x) = val : EndIf
    Next
  EndIf
  System\UpdateProfile = #True
  lastVal = Val : lastPos = pos
EndProcedure
Procedure Profile_Smooth(Iterations = 64) ; basic smoothing
  Protected x, spread = 9, iter
  Dim tmpProfile.f(#points)
  For iter = 1 To Iterations
    CopyArray(Profile(),tmpProfile())
    For x = 3 To #Points-3 ; constrained to avoid smoothing end caps
      Profile(x) = (tmpProfile(x) * 0.4) + (tmpProfile(x-1) * 0.3) + (tmpProfile(x+1) * 0.3)
    Next
  Next
  System\UpdateProfile = #True
EndProcedure
Procedure Profile_Init() ; mathemetical start point
  Protected myLoop 
  For myLoop = 0 To #Points
    Profile(myLoop) = 128.0 + 100.0 * Sin(myLoop / 128.0)
  Next  
  Profile(#Points-1) = 0
  System\UpdateProfile = #True
EndProcedure
Procedure Profile_Update() ; load the Points() array with the Profile() array
  Protected myLoop
  For myLoop = 0 To #Points - 1
    Points(myLoop)\y = (myLoop - (#Points * 0.5)) * #ScaleY ; position along spindle
    Points(myLoop)\x = profile(myLoop) * 0.0325             ; radius
  Next
  Lathe(Points(), #Slices)
EndProcedure

Procedure Render() ; use opengl to render the model and the 2d profile
  Protected profileHeight.f = 256, myLoop
  glClearColor_(0.6, 0.6, 0.6, 1.0)
  glClear_(#GL_COLOR_BUFFER_BIT | #GL_DEPTH_BUFFER_BIT)
  glEnable_(#GL_DEPTH_TEST) : glEnable_(#GL_COLOR_MATERIAL)
  glEnable_(#GL_LIGHTING) : glEnable_(#GL_LIGHT0)
  glMatrixMode_(#GL_PROJECTION) : glLoadIdentity_()
  gluPerspective_(50, WindowWidth(0)/WindowHeight(0), 0.01, 70);
  glMatrixMode_(#GL_MODELVIEW) : glLoadIdentity_()
  gluLookAt_(0, 10, 35, 0, 0, -20, 0, 1, 0)
  
  glRotatef_(System\Rotation\x, 0, 1, 0)
  glRotatef_(-System\Rotation\y, 1, 0, 0)
  
  ; draw model
  glColor3ub_(205, 127, 50)
  glEnableClientState_(#GL_VERTEX_ARRAY)
  glEnableClientState_(#GL_NORMAL_ARRAY)
  glVertexPointer_(3, #GL_FLOAT, SizeOf(sVertex), @model(0)\position)
  glNormalPointer_(#GL_FLOAT, SizeOf(sVertex), @model(0)\normal)
  glDrawArrays_(#GL_TRIANGLES, 0, ArraySize(model(), 1))
  glDisableClientState_(#GL_VERTEX_ARRAY)
  glDisableClientState_(#GL_NORMAL_ARRAY)
  
  ; draw the profile are
  glMatrixMode_(#GL_PROJECTION) : glLoadIdentity_()
  Protected Width = #Width * DesktopResolutionX()
  Protected Height = #Height * DesktopResolutionY()
  glOrtho_(0, Width, Height, 0, -1, 1)
  glMatrixMode_(#GL_MODELVIEW) : glLoadIdentity_()
  glDisable_(#GL_LIGHTING) : glDisable_(#GL_DEPTH_TEST) : glDisable_(#GL_COLOR_MATERIAL)
  glEnable_(#GL_BLEND) : glBlendFunc_(#GL_SRC_ALPHA, #GL_ONE_MINUS_SRC_ALPHA)
  glBegin_(#GL_QUADS)
  glColor4f_(0.7, 0.72, 0.72, 0.3)
  glVertex2f_(0, profileHeight) : glVertex2f_(#points, profileHeight) : glVertex2f_(#points, 0) : glVertex2f_(0, 0)
  glEnd_()
  glBegin_(#GL_LINES)
  glColor4f_(0.3, 0.53, 0.7, 0.5)
  For myLoop = 0 To #points - 1
    glVertex2f_(myLoop, 0) : glVertex2f_(myLoop, profile(myLoop))
  Next
  glColor4f_(0.1, 0.1, 0.1, 1.0)
  glVertex2f_(0, profileHeight) : glVertex2f_(#points, profileHeight)
  glVertex2f_(#points, profileHeight) : glVertex2f_(#points, 0)
  
  glEnd_()
  
  SetGadgetAttribute(#myGad_GL, #PB_OpenGL_FlipBuffers, #True)
EndProcedure

Procedure Init_Main()
  OpenWindow(#myWin_Main, 0, 0, #Width, #Height + 32, "OpenGL Lathe", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  AddWindowTimer(#myWin_Main, #myTimer_Render, 15)
  OpenGLGadget(#myGad_GL, 0, 0, #Width, #Height,#PB_OpenGL_Keyboard|#PB_OpenGL_NoFlipSynchronization|#PB_OpenGL_24BitDepthBuffer)
  ButtonGadget(#myGad_Button_Smooth,0,#Height+2,100,24,"Smooth")
  CheckBoxGadget(#myGad_Checkbox_AutoSmooth,104,#Height+2,100,24,"Auto Smooth")
  SetGadgetState(#myGad_Checkbox_AutoSmooth,1)
  Profile_Init()
  System\Rotation\x = 60
EndProcedure

Init_Main()

Repeat
  Repeat
    System\Event = WindowEvent()
    Select System\Event
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #myGad_Button_Smooth : Profile_Smooth()
            
          Case #myGad_GL
            System\MouseOld = System\mouse
            System\mouse\x = GetGadgetAttribute(#myGad_GL, #PB_OpenGL_MouseX) : System\mouse\y = GetGadgetAttribute(#myGad_GL, #PB_OpenGL_MouseY)
            Select EventType()
              Case #PB_EventType_LeftButtonDown
                System\LMB = #True
                Profile_SetHeight(System\mouse\x,System\mouse\y)
              Case #PB_EventType_LeftButtonUp : System\LMB = #False
              Case #PB_EventType_MouseMove
                If System\LMB = #True
                  Profile_SetHeight(System\mouse\x,System\mouse\y)
                  If GetGadgetState(#myGad_Checkbox_AutoSmooth) : Profile_Smooth(2) : EndIf
                ElseIf System\RMB = #True
                  System\Rotation\x + ((System\mouse\x - System\MouseOld\x) * 0.2)
                  System\Rotation\y - ((System\mouse\y - System\MouseOld\y) * 0.2)
                EndIf
              Case #PB_EventType_RightButtonDown  : System\RMB = #True
              Case #PB_EventType_RightButtonUp : System\RMB = #False
            EndSelect
        EndSelect
      Case #PB_Event_CloseWindow : System\Exit = #True
      Case #PB_Event_Timer : System\Render = #True
        
    EndSelect
  Until System\Event = 0
  
  If System\Render = #True : System\Render = #False : Render() : EndIf
  If System\UpdateProfile = #True : System\UpdateProfile = #False : Profile_Update() : EndIf
  
Until System\Exit = #True
Screws aren't doable with this method as it uses a single swept profile - it could be modified to have a per-sweep-section profile though, but it'd be a fair bit more work.
SMaag
Enthusiast
Enthusiast
Posts: 318
Joined: Sat Jan 14, 2023 6:55 pm
Location: Bavaria/Germany

Re: 3D subtraction of parts ...

Post by SMaag »

That opend my eyes to use OpenGL directly.

I realized that's better to put the Vertices of a 3D Object into an Array not into a List.
Than it is possible to draw it directly with OpenGL.

I started my ConstructiveSolidGeomentrie Modul with a VertexLists!
User avatar
pf shadoko
Enthusiast
Enthusiast
Posts: 386
Joined: Thu Jul 09, 2015 9:07 am

Re: 3D subtraction of parts ...

Post by pf shadoko »

you'll have to start creating meshes
here, I've created a procedure for creating meshes with symmetry along an axis
you define a section (here a circle) and a profile

PS: I made a 2nd code for your chain problems, but I didn't get a reply, so I wonder if you've seen it...

Code: Select all

InitEngine3D():InitSprite():InitKeyboard():InitMouse()

ExamineDesktops()
OpenWindow(0, 0,0, DesktopWidth(0)*0.8,DesktopHeight(0)*0.8, "CreateShader - [Esc] quit",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0)

CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,0,0,-100):CameraLookAt(0,0,0,0);:CameraRenderMode(0,#PB_Camera_Wireframe)
CreateLight(0,$111111*8, -1000, 1000, -1000)
AmbientColor($111111*3)
CameraBackColor(0,$444488)


Procedure CreateAxialMesh(mesh,Array profils.vector3(1),Array section.vector3(1))
  Macro profilsJ()
    ar=r
    ah=h
    r=profils(j)\x              :If r=0:r=0.001:EndIf;bug CreateDataMesh
    h=profils(j)\y
    v+Sqr((r-ar)*(r-ar)+(h-ah)*(h-ah))
  EndMacro
  
  Protected i,j,i1,j1,r.f,h.f,ar.f,ah.f,v.f,vv.f,n,m,ni.vector3,nj.vector3
  n=ArraySize(section())
  m=ArraySize(profils())
  Dim t.MeshVertex(n,m)
  r=profils(0)\x:h=profils(0)\y:v=0
  For j=0 To m:profilsJ():Next:vv=v
  
  r=profils(0)\x:h=profils(0)\y:v=0
  For j=0 To m
    profilsJ()
    For i=0 To n
      With t(i,j)
        \x=section(i)\x* r
        \y=h
        \z=section(i)\y* r
        \u=i/n
        \v=v/vv
        \color=$ffffffff
      EndWith
    Next
  Next
  ProcedureReturn CreateDataMesh(mesh,t(),2+8)        
EndProcedure

Dim section.vector3(64)
For i=0 To 64
  a.f=2*#PI/64*i
  section(i)\x=Cos(a)
  section(i)\y=Sin(a)
Next

Dim profil.vector3(100)
i=0
Macro addpr(vx,vy,twice=0,decy=-30)
  For j=0 To twice
  profil(i)\x=vx
  profil(i)\y=vy+decy
  i+1  
  Next
EndMacro
addpr(0,0)
addpr(10,0,1)
addpr(10,50,1)
addpr(9,50,1)
addpr(9,60,1)
addpr(2,60,1)
addpr(0,58)
ReDim profil(i-1)

CreateShaderMaterial(0,#PB_Material_ColorShader)
MaterialShininess(0,128,$111111*15)
MaterialCullingMode(0,#PB_Material_NoCulling)


Define.f MouseX,Mousey,depx,depz,dist,val,a,rotx,roty,rotz

Repeat
	While WindowEvent():Wend
	ExamineKeyboard()
	ExamineMouse()
	
	a+0.1
	For i=5 To 8
	  profil(i)\x=9+Sin(a)
	Next
	CreateAxialMesh(0,profil(),section())
	CreateEntity(0,MeshID(0),MaterialID(0))
	
	rotx+0.3
	rotz+0.5
	RotateEntity(0,rotx,0.0,rotz, #PB_Absolute)
	RenderWorld()
	FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)
marc_256
Addict
Addict
Posts: 841
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: 3D subtraction of parts ...

Post by marc_256 »

Hi guys,

Sorry for the late response ...
I'm still working on my HPGL importer, COLLADA importer and my CAM IDE.
Well, for the COLLADA stuff, I downloaded the manual and I'm studiing the protocol.


Thanks for all yours hard work here,


pjay,
thanks, this is very interresting stuff ...
I'm trying to understand your program, how to build the restult.
Gone test it ...


pf shadoko,
I'm gone download your program and test it ...
And also here, trying to understand the program.
PS: I made a 2nd code for your chain problems, but I didn't get a reply, so I wonder if you've seen it...
I gone look for it now. :oops:



Again, thanks for your work and motivations, I gone need it.
How longer I'm developing 3D stuff, the more I respect developers of the OGRE 3D and BLENDER 3D stuff.

marc,



PS: As I work on my 3D simulator, I had have the idea to make a sort of real time 3D view while building the 3D objects,
build of only the EDGES (framework), before create a OGRE mesh.
Will post a screenshot when I have some results ...
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
SMaag
Enthusiast
Enthusiast
Posts: 318
Joined: Sat Jan 14, 2023 6:55 pm
Location: Bavaria/Germany

Re: 3D subtraction of parts ...

Post by SMaag »

I'm still working on my HPGL importer, COLLADA importer and my CAM IDE.
Well, for the COLLADA stuff, I downloaded the manual and I'm studiing the protocol.
May I ask, what is the reason for importing HPGL and COLLADA?

HPGL is a Plotter File! (Yes it is easy and maybe a good training)
But what you want to do with that stuff?

COLLADA is a 3D Scene file format and do not support Constructive Solid Geometry CSG
like a CAD program provide! What we need for 3D CAD solid geometry is IGES or STEP.
COLLADA seems to be a good format to store scences for a physical engine like OGRE (but that's not CAM stuff!).
marc_256
Addict
Addict
Posts: 841
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: 3D subtraction of parts ...

Post by marc_256 »

Hi sMaag,


- Why HPGL ?
Well for me, after a lot of tests ...
It is the simplyest way to quickly draw designs in my dayly used CAD program,
and import it in my PLC program. (see IR sensor example below)
It is the less complex way to import my designs.
With HPGL import, I can easely scale and rotate these drawings.
I have also an older A3 HP plotter, so I can directly plot my designs.

Image


- Why COLLADA ?
Here the same, after a lot of tests,
for my imports in my PB 3D OGRE simulator, this is the best MESH builder/converter.
- I can easely export my 3D drawings from CAD program in COLLADA format.
- Import COLLADA file in BLENDER and assemebling/positioning multy mesh scenes.
- Export to Ogre Mesh format.
- Import the Mesh files in my PB 3D ogre simulator.
See the 2 images on top of this posts. (post1)


- STEP is ok for the further phase in my only CAD part of my (huge) program.


Marc,
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
threedslider
Enthusiast
Enthusiast
Posts: 396
Joined: Sat Feb 12, 2022 7:15 pm

Re: 3D subtraction of parts ...

Post by threedslider »

marc_256 wrote: Fri Oct 25, 2024 11:17 am And sMaag,

Thanks again for your reply,
I think we are the only one on this forum who are doing/developing some 3D CAD stuff.
You are not the only one who do 3D, myself I do it too :mrgreen: , I am working to a 3D modeling in Purebasic in my free time as well :D
marc_256 wrote: Tue Nov 05, 2024 11:57 pm Again, thanks for your work and motivations, I gone need it.
How longer I'm developing 3D stuff, the more I respect developers of the OGRE 3D and BLENDER 3D stuff.

marc,
Not from my 3D modeling though, right now I am working a simple CAD and I will show you how to make a surface of revolution by adding with vertices and then making as auto to face polygon :wink: . It is somewhat a little based by pjay :mrgreen:

Wait and see and I am soon to finish it !

Happy coding
SMaag
Enthusiast
Enthusiast
Posts: 318
Joined: Sat Jan 14, 2023 6:55 pm
Location: Bavaria/Germany

Re: 3D subtraction of parts ...

Post by SMaag »

@marc_256
- Why HPGL ?
- Why Collada ?
Ok, I understand your intention and I think that's a good workarround for the 3D stuff!
marc_256
Addict
Addict
Posts: 841
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: 3D subtraction of parts ...

Post by marc_256 »

SMaag wrote: Thu Nov 07, 2024 7:33 pm @marc_256
- Why HPGL ?
- Why Collada ?
Ok, I understand your intention and I think that's a good workarround for the 3D stuff!
Well, I'm happy you understand my way of working ... :wink:

Marc
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
marc_256
Addict
Addict
Posts: 841
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: 3D subtraction of parts ...

Post by marc_256 »

Hi,

Just to show my latest progress for my 3D mesh viewer/editor.
This is based (for now) on pure CPU 3D calculations and images/sprites.

This is the first test of my lathe part mesh, started from scratch.
Step 1) Enter the lathe part data
Step 2) Create a vertices list
Step 3) Create Faces list from the vertices
Step 4) Scale all data for 3D viewer
Step 5) Show data on screen

Next step is to include all my 3D models (meshes) in the viewer/editor.
And a property box, to see the mesh/object data ...

Comments are always welcome ...

PS: I have some bugs with my camera and light positions/rotations for now.
So, will be fixed later ...

Marc

Image
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
threedslider
Enthusiast
Enthusiast
Posts: 396
Joined: Sat Feb 12, 2022 7:15 pm

Re: 3D subtraction of parts ...

Post by threedslider »

Hi @marc_256

Nice progress ! :D

I am looking forward to your project ^^

And I hope you will share your source code as well :mrgreen:

Mine is in progress too, see that below :

Image

Not finishing though, I am still working on that :wink:

Happy coding !
marc_256
Addict
Addict
Posts: 841
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: 3D subtraction of parts ...

Post by marc_256 »

Hi,

@threedslider

Nice begin of your CAD program,
don't lose the motivation to progress.


I repeat myself, the more I work with 3D,
the more I respect the work of others who develop 3D software ...

This is hard, really hard (for me) with limited knowledge of math.

My latest lathe part simulation from scratch.
With rounded and broken corners/borders.

Image

Greetings,
Marc
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
threedslider
Enthusiast
Enthusiast
Posts: 396
Joined: Sat Feb 12, 2022 7:15 pm

Re: 3D subtraction of parts ...

Post by threedslider »

marc_256 wrote: Sun Nov 10, 2024 1:28 am Hi,

@threedslider

Nice begin of your CAD program,
don't lose the motivation to progress.
Thank you so much @marc_256 :D And you don't lose your progress too :wink:

marc_256 wrote: Sun Nov 10, 2024 1:28 am This is hard, really hard (for me) with limited knowledge of math.
There is you can expand your knowledge for 3D meshes, see a little doc from that : https://www.enseignement.polytechnique. ... ctures.pdf and you can make this one easily in Purebasic with mesh representations and their data structures 8)

Google is your friend, search some math you want to know more it and you can make your a great 3D app :mrgreen:
threedslider
Enthusiast
Enthusiast
Posts: 396
Joined: Sat Feb 12, 2022 7:15 pm

Re: 3D subtraction of parts ...

Post by threedslider »

Ok my recommendation is for you :

https://www.diva-portal.org/smash/get/d ... TEXT01.pdf

it is some math for computer graphics :D

But if you want more complete of computer graphics and more depth it is here :

https://mathweb.ucsd.edu/~sbuss/CourseW ... dDraft.pdf

Needed to upgrade your knowledge, don't worry it is here to complete it :

viewtopic.php?t=85644
marc_256
Addict
Addict
Posts: 841
Joined: Thu May 06, 2010 10:16 am
Location: Belgium
Contact:

Re: 3D subtraction of parts ...

Post by marc_256 »

Hello threedslider,

Thanks for the really good documentations.
But 3D is still a complex math (for me).


Thanks,
greetings,
marc
- every professional was once an amateur - greetings from Pajottenland - Belgium -
PS: sorry for my english I speak flemish ...
Post Reply