Anyone knows what kind of mesh representation data structures (half-edge, quad-edge, winged-edge etc) popular software like Lightwave 3D, Maya, Softimage, 3D studio and others use?

Tag: 3d,mesh,3d-modelling

Anyone knows what kind of mesh representation data structures (half-edge, quad-edge, winged-edge etc) popular software like Lightwave 3D, Maya, Softimage, 3D studio and others use?

The indexed mesh is, by far, the most popular and used by at least Maya, LW, 3DS Max, and Modo. I'm not sure about XSI and Cinema 4D (haven't looked into their SDKs quite as much).

Wings3D uses winged edges, as its name implies, as did Mirai and Nendo from which it was based. These are some of the exceptional cases, but you can see as a result that they only support manifold meshes.

One of the reasons the basic indexed mesh structure is so popular over more fancy variants like the half-edge or winged-edge rep is because the indexed mesh maps very directly to the GPU. These packages are often focused on visualizing changes in realtime, such as character deformations on a frame-by-frame basis or sometimes even topology changes. Having a data structure that maps more directly to GPU often means less time spent synchronizing your application-specific data structures with what's on the GPU, so it tends to be the most efficient if your focus is on realtime GPU visualization/interaction in a viewport.

Another reason is because these packages handle such a wide range of mesh cases, including some challenging data like 6-manifold edges, a single polygon with multiple holes, etc. An indexed mesh supports all of these cases.

Sometimes a certain feature like a modeling tool that does a hefty amount of processing (ex: a decimator) might temporarily convert the indexed mesh to a different data structure like a half-edged rep for the sake of that one algorithm, converting back to the indexed mesh when it is done.

To add reflection first you need mirror light vector by surface normal all these are unit vectors: l - (yellow) to light source n - (aqua) surface normal r - (green) reflected light direction e - (orange) to eye/camera direction points: p - (red) - rendered pixel position q -...

Generate the points in the straight position then apply the rotation (also check the origin of the coordinates).

The following describes a way, which should work for your situation. Compute normal in billboard space For example, you could use your texture coordinates here float3 normal = float3(Tex.x*2-1, 0, Tex.y*2-1); normal.y = sqrt(normal.x*normal.x+normal.y*normal.y) Create an orthonormal transformation matrix (World -> Billboard) This matrix consists of the three normalized base...

Theoretically normals are not really vectors, they are really best though of as bivectors, it just so happens that in 3D both vectors and bivector have three components so it is common to identify they two. If we lived in a four dimensional world we would not have this confusion....

The Box() constructor is meant for serialization only and doesn't initialize the mesh. The constructor in your upper example is deprecated. Use: tower = new Box(0.5f, 0.5f, 0.5f); This will create a cube of the size 1x1x1 centered at [0, 0, 0]. Also, make sure you look at the tower....

web,unity3d,3d,augmented-reality,unity-web-player

Try this. Furthermore, I would just uninstall everything and just reinstall with a stable version of Unity 5.

matlab,image-processing,plot,3d,surface

Setting those values to NaN should do. Here's an example: [x, y] = ndgrid(linspace(-1,1,500)); z = cos(2*pi*(x+y)*2); z(x.^2+y.^2>1) = NaN; %// remove values outside unit circle surf(x,y,z,'edgecolor','none') colorbar view(2) axis equal ...

You can do this using rgl package (interface to openGL) in R and the turn3d function ## Define a function (ys must be positive, we are spinning about x-axis) f <- function(x) 2*exp(-1/2*x) * (cos(pi*x) + sin(pi*x)) + 2 xs <- seq(0, 10, length=1000) plot(xs, f(xs), type="l") ## Rotate about...

javafx,3d,transparency,transparent,javafx-3d

Transparency in JavaFX 3D shapes has been a long time request... until recently: Since JDK8u60 early access release b14, transparency is enabled in 3D shapes. You can add color with transparency as diffuse color, like in this answer. Also you can add images with some transparency level on every pixel,...

A possible solution could be: to define a matrix of colour indeces: since you need 9 colours it should be a (9 x 3) matrix to use the value stored in the 5th column of your data to select the color in the color matrix (i. e. to select the...

python,performance,dictionary,3d,pygame

Pygame doesn't have the ability to do this natively. If you really want this, you'll need to brush up on your trigonometry to map lines from the 3D space to the 2D screen. At that point, you'll essentially be re-implementing a 3D engine.

Open the model in Blender and export it to Roblox's .mesh ==Edit== Sorry, I just pointed at some stuff that i thought would work, but when I tried it I noticed that the add-on was flawed (not much of it was working) so I edited it a bit (it is...

You can use conditional plotting. splot 'data.txt' u ($1==6 ? $2:1/0):3:4 title 'At-no 6' w points pt 7, \ 'data.txt' u ($1==7 ? $2:1/0):3:4 title 'At-no 7' w points pt 7, \ 'data.txt' u ($1==1 ? $2:1/0):3:4 title 'At-no 1' w points pt This creates ...

c++,algorithm,3d,marching-cubes

Lots of questions. I am going to try to give some pointers. First of 200^3 is a pretty small dataset for ct! what about 1024^3? :) Marching cubes is built for regular grids. So wether data is defined at cube vertices or centers really does not matter: just shift by...

opencv,image-processing,3d,camera-calibration

x, y image point only determines a ray from the camera centers through the image point. It has infinite number of possible z and when you multiply images point with inverse matrices you will get an equation of a ray or a line. It is impossible to get 3D from...

I fixed it! First thing I had to do was add my buffer binding and attribute pointing into the while loop, I guess you have to tell opengl about them every time you call useProgram. The second thing was I needed to call glUniformMatrix4fv if I wanted to pass my...

If you want to get the pitch, yaw and roll angles at any stage after several rotations, you can get them from the transformation matrix of the 3D model. If you have a look at the transformation matrix after several rotations: Transform T = model3D.getLocalToSceneTransform(); System.out.println(T); you'll see something like...

algorithm,3d,geometry,distance,computational-geometry

Find affine transform M that translates this ellipse in axis-oriented one (translation by -p and rotation to align orientation vector r and proper coordinate axis). Then apply this transform to point p and check that p' lies inside axis-oriented ellipsoid, i.e. x^2/a^2+ y^2/b^2+z^2/c^2 <= 1

I see you also created a github issue. That's the right place to ask this.

ios,unity3d,shader,mesh,particle

You can do it using geometry shaders to create billboarding geometry from each vertex on the GPU. You can then either create the circles as geometry, or create quads and use a circle texture to draw them (I recommend the later). But geometry shaders are not extensively supported yet, even...

matlab,user-interface,3d,rotation,lighting

Implement own rotation functionality You can implement an own functionality to adjust the axes and the lights at the same time. This way the light gets adjusted continuously while rotating the axes. function follow_me_1 figure axes('buttondownfcn', @buttondownfcn); % assign callback set(gca,'NextPlot','add'); % add next plot to current axis surf(peaks,'hittest','off'); %...

I think your error in the 3D vs 2D surface colour is due to data normalisation in the surface colours. If you normalise the data passed to plot_surface facecolor with, facecolors=plt.cm.BrBG(data/data.max()) the results are closer to what you'd expect. Unless you have a strong reason for using imshow, you may...

You should use labels.append instead of numpy.append Example code - labels = [] for line in lines: lab = [h/100, maxf, title] labels.append(lab) Also this would create the labels list as - [[1,34,u'te],[2,44,u've],[4,43,u'ht]] [1,34,u'te],[2,44,u've],[4,43,u'ht] is not possible in python, these are either three different lists, or they are enclosed by...

One aspect to watch out for is the order of transformations. When you specify transformations using the legacy OpenGL matrix stack, they are applied to the vertices in reverse order of the order they are specified in. For example, if you have this sequence: glTranslatef(...); glRotatef(...); This means that vertices...

javascript,three.js,mesh,interactive

Solved it. Actually I wasn't able to loop trough meshes into scene. Didn't know about scene.traverse(). Here's the new code: function onDocumentMouseDown( event ) { event.preventDefault(); mouse.x = ( event.clientX / renderer.domElement.width ) * 2 - 1; mouse.y = - ( event.clientY / renderer.domElement.height ) * 2 + 1; raycaster.setFromCamera(...

graphics,unity3d,3d,game-engine

If you don't use realtime shadows (it's an option, often on mobile), than you can have more or less 2 approach for dynamic objects: Use lightmap data baked into probes to approximate per-vertex lighting (no need to have realtime light). It's an approximation but can work on some contexts. Use...

merge,three.js,geometry,rendering,mesh

Use the matrix4 toolset for translation (and rotation if you want), then merge your geometrys: var geometry = new THREE.TorusGeometry( 11, 0.5, 16, 100 ); var mergeGeometry = new THREE.Geometry(); var matrix = new THREE.Matrix4(); for( i = 1; i <= 50; i++ ) { matrix.makeTranslation( 0, 3.4 * i,...

update after further clarifications and chat The whole proint is that 3D transformatins are not commutative. This means that translating and then rotating is different that rotating and then translating (will produce different results). In some special cases these can coincide (e.g origins are at 0,0,0 and so on..), but...

c#,unity3d,game-engine,mesh,tile

if you want to scroll uv`s , you can do it by changing the texture offset in Update method , it can be used for background of a 2d game using UnityEngine; using System.Collections; public class ScrollingUVs : MonoBehaviour { public int materialIndex = 0; public Vector2 uvAnimationRate = new...

java,javafx,javafx-8,mesh,javafx-3d

One easy solution to make your subscene resize with its parent is just binding its dimensions to those of the parent. For instance: private SubScene createScene3D(Group group) { SubScene scene3d = new SubScene(group, VIEWPORT_SIZE, VIEWPORT_SIZE, true, SceneAntialiasing.BALANCED); scene3d.widthProperty().bind(((AnchorPane)meshGroup.getParent()).widthProperty()); scene3d.heightProperty().bind(((AnchorPane)meshGroup.getParent()).heightProperty()); scene3d.setFill(Color.WHITE); scene3d.setCamera(this.camera);...

The following MAXScript function demonstrates how to calculate a box2 of the safe frame dimensions, given a point2 of the viewport size and the render size. We need to account for two separate cases: one where the differences in aspect result in spacing on the left and right, and one...

python,matplotlib,plot,3d,surface

Apparently, after some trial and error, the best/easiest thing to do in this case is to just to convert the r, theta, and z data points (defined as 2D arrays, just like for an x,y,z plot) into cartesian coordinates: # convert to rectangular x = r*numpy.cos(theta) y = r*numpy.sin(theta) z...

algorithm,geometry,computational-geometry,mesh,3d-model

If a 3D object is "simple", meaning that it doesn't have holes, it satisfies Euler's Formula for Polyhedra, V - E + F = 2 where V is the number of vertices in the figure, E is the number of edges, and F is the number of faces. If you...

Are yRes and xRes declared as int? If that's the case, the division y/x may be 0. Try casting one of the variables to float. In addition, I noticed that you are calculating the aspect ratio using yRes/xRes. If you are using yRes for height and xRes for width, you...

You could do the following: library(scatterplot3d) a<-c(1:10) b<-c(1:10) c<-c(1:10) #remove x labels using x.ticklabs = '' scatterplot3d(a,b,c, main="3-D Scatterplot",color="blue", pch=19, type="h", lty.hplot=2, box=F, scale.y=.5, lty.grid=1, lab=c(9,5,1), xlab="", ylab="", zlab="", x.ticklabs='') #add the labels using the text function. srt specifies the angle. text(x=b, y=1, pos=1, labels=b, srt=45, adj=1, xpd=TRUE, offset=0.5) And...

You missed one line on the Wikipedia page where So add this line n0 = n / norm(n); and change the final line to L = ((n0*A)-d); ...

The color RGB vector is multiplied by the shade coefficient (the cosine value as you initially assumed) The logarithmic scaling is done by the target imaging device and human eyes If your colors get too dark then the probable cause is: the cosine or angle value get truncated to integer...

arrays,image-processing,multidimensional-array,3d,wolfram-mathematica

Your Mathematica syntax is seriously wonky. And you probably shouldn't be using Do, or any other looping construct, in the first place. Let's take some baby steps before we try to walk ... According to the documentation, and my experience, Image3D[{img1,img2}] loads the list of 2D images (the list is...

c++,opengl,3d,drag-and-drop,mouse-picking

I'm used to solving these user-interaction problems somewhat naively (perhaps not in a mathematically optimal way) but "well enough" considering that they're not very performance-critical (the user interaction parts, not necessarily the resulting modifications to the scene). For unconstrained free dragging of an object, the method you described using unproject...

Using some simulated data this should get you what you want. The key is that you have to create your bivariate bins, accomplished using the cuts() function. Then treating the binned factors as levels we can then count the combinations of each factor level using the table() function: library(plot3D) ##...

c++,3d,directx,direct3d,directx-9

In your code (downloaded), xRes and yRes are ints. Due to integer division, yRes/xRes will be zero, because xRes > yRes. You are passing this into the D3DXMatrixPerspextiveFovLH function as the aspect ratio, which will produce an invalid matrix. Instead, cast them to floats first, before doing the division, and...

python,matplotlib,plot,3d,surface

Even if I agree with the others that meshgrids are not difficult, still I think that a solution is provided by the Mayavi package (check the function surf) from mayavi import mlab mlab.surf(Z) mlab.show()...

I'm taking you at your word that you want circles, so you need to push the plot area into the upper right corner: outHalfCirc <- function(r,colr) {opar=par(xpd=TRUE, new=TRUE) #plot ouside plot area polygon(x=seq(r,-r,by=-0.1), y= -sqrt(r^2 - seq(r,-r,by=-0.1)^2) , # solve r^2 = x^2 +y^2 for y xlim =c(0,7 ), ylim=c(0,10),...

You are defining the variable material in two places, and consequently you are passing MeshBasicMaterial instead of LineBasicMaterial to the THREE.Line constructor. three.js r.71...

Imagine, instead of a camera, you're moving your head around in 3D space. then Camera.Position is specifying where your head is located, Camera.LookDirection determines the direction you're looking at and Camera.UpDirection shows the orientation of your head. the following pictures clear things up for you. In the first Image, Camera...

If you are referring to rotating an image during a Swing paint operation, then the correct way to do this is with an AffineTransform. Graphics2D graphic; graphic.drawRenderedImage(image, AffineTransform.getRotateInstance(Math.PI)); Unfortunately AffineTransform does not support perspective transforms (by definition a transform is only Affine if parallel lines remain parallel). For perspective transforms...

You want to get an MDagPath leading to the transform and then use .extendToShape or .extendToShapeDirectlyBelow() to get the shape node. Then you need to get an MFnMesh from the shape and use that to get to the vertices. Here's the python version, which is all I have handy. Apart...

I solved my own problem. The reason is that I mixed up two versions of OpenSceneGraph, one is compiled with VS2012 without JPEG plugin and the other is compiled with VS2010 with JPEG plugin. The OSG compiled with VS2010 will not work under VS2012. Now I've found another OSG compiled...

You can calculate the bounding box of your mesh, and scale it based on the number you get to make it the same size as other objects.

Ok I fixed it by changing my shader to String vertexShader = "attribute vec4 a_position;\n" + "attribute vec4 a_color;\n" + "attribute vec2 a_texCoord;\n" + "uniform mat4 u_worldView;\n" + "varying vec4 v_color;\n" + "varying vec2 v_texCoords;\n" + "void main()\n" + "{\n" + " v_color = vec4(1, 1, 1, 1);\n" + "...