This is the discussion forum for Helix Toolkit.
For bugs and new features, use the issue tracker located at GitHub.
Also try the chat room!
0

Loading a texture onto a model.

Anonymous 11 years ago 0
This discussion was imported from CodePlex

Rogad wrote at 2013-12-05 17:04:

I understand the way to apply basic colours, but what about when we have a model with a texture. How can we load the texture at runtime please ?

Eventually I will be moving vertices around, so I need to know how to load the textures dynamically.


I can understand this code taken from the SimpleDemo :
            // Create some materials
            var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green);
            var redMaterial = MaterialHelper.CreateMaterial(Colors.Red);
            var blueMaterial = MaterialHelper.CreateMaterial(Colors.Blue);
            var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow);

            // Add 3 models to the group (using the same mesh, that's why we had to freeze it)
            modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial });
            modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial });
            modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial });
How do I do this same thing but with an image, for example I am trying to load a .PNG image....

Many thanks !

Rogad wrote at 2013-12-05 18:20:

Here's where I am at now with this.

I load a .OBJ model that has 7 children, the first child 0 is the mesh of the hair.

I'm loading my 'start' model like this :
ObjReader CurrentHelixObjReader = new ObjReader();
start = CurrentHelixObjReader.Read("C:/Users/Roger/Desktop/head/base_med_.obj");
So I load the OBJ fine but when I try to grab the material of the original model child 0 (ie the hair) like this :
Material matty = (MaterialGroup)((GeometryModel3D)start.Children[0]).Material;
It gives me an error :
An unhandled exception of type 'System.Windows.Markup.XamlParseException' occurred in PresentationFramework.dll

Additional information: 'The invocation of the constructor on type 'HelixTrial.MainWindow' that matches the specified binding constraints threw an exception.' Line number '4' and line position '9'.
I can remove the line and get the model to load, but I need to get hold of the start up material for the hair so that I can apply it later when I alter the mesh via morph targets and rebuild it.

So I would be trying to apply 'matty' like so (partial code) when I rebuild the model :
final.Children.Add(new GeometryModel3D { Geometry = mes, Material = matty });
That last line is part of a loop that rebuilds the Model3DGroup for display in the viewport.

I hope I made sense ! Anyone care to tell me what I am doing wrong ? Here's a picture if it helps visualise... it's just a starting point, I haven;t looked at transparency for the hair at all yet.



Rogad wrote at 2013-12-05 21:04:

I must stop asking questions so quickly, I managed to piece it together ! But for anyone else this is what you can do :

To load a material image you can simple do this :
Material myMaterial = MaterialHelper.CreateImageMaterial("path/to/image/image.jpg", 1);
The '1' is opacity.

And in my particular problem of getting an existing model's texture you can do this :

Instead of my using :
Material matty = (MaterialGroup)((GeometryModel3D)start.Children[0]).Material;
I did this :
Material anotherMaterial = ((GeometryModel3D)start.Children[0]).Material;
Now I have grabbed the hair texture from the original model and can use it later to reapply it when needed.

I do still have an icky problem with the hair and it's transparency. The original model used TGA images. I am not sure exactly how these compare to PNG, but I used an online converter and converted it to PNG. The texture loads but it's not rendering quite right.



As can be seen it doesn't appear to be rendering the transparent areas as see-through.

Any ideas on fixing that please ?
0

Performance of camera rotation with big STL file

Anonymous 11 years ago 0
This discussion was imported from CodePlex

gmgunderground wrote at 2014-05-07 18:44:

Hi to everyone, I'm making some tests with this fantastic library. I have a simple 3D view, inside this I load a STL file with 800.000 triangles, all is working fine but camera rotation, and zoom are very very slow. Is normal? Is there a solution to speed up the process? Does WPF use DirectX for rendering or is all software?

Best regards
0

Importing DAZ3D model, textures messed up.

Anonymous 11 years ago 0
This discussion was imported from CodePlex

Rogad wrote at 2013-12-10 17:43:

Aloha !

So I am trying to load a Daz3D figure. Only problem is the textures are all messed up. Most of the textures don't show up at all. The face is about the only one that loads up correctly, despite one eye texture going AWOL too. Confused :/



I looked at the UV maps in UVMapper and they seem okay, so I don't think it's an export problem in DazStudio.

I'm exporting from DazStudio in .OBJ file format.

Do you think there could be a problem with your .OBJ importer ?

I can send you the model I guess, I won't post a link here as it's probably copyright, even though it's a freebie and freely obtainable.

Thanks for looking :)

Rogad wrote at 2013-12-13 11:25:

Objo,, any thoughts ?

objo wrote at 2013-12-16 18:45:

Yes, this is probably bug or limitation in the obj importer. Did you try importing into other software, e.g. MeshLab?
Can you export a small model that can be used for debugging? I would prefer a model that can be posted here and included in the unit tests!

Rogad wrote at 2013-12-16 21:19:

Hi :)

Yes I imported the model into Blender and the textures all load correctly. The only thing that was not quite right was the eyelashes, but I think that is some transparency thing that I have yet to figure out.

I don't have any other models from Daz3D I just have a few morphs which are commercial so I cannot pass on. It's free to download DazStudio though if you want to have a look. It should come with a basic figure and texture.

David_NET wrote at 2013-12-18 23:32:

I wonder if it is worth using Assimp.NET as model importer. Not sure this is possible as preliminary Google search has not shown anyone attempted for WPF3D. It is used in SharpDX.

Rogad wrote at 2013-12-21 17:36:

I've not heard of that David.

Objo, would you like me to email you the model so you can experiment ?

objo wrote at 2014-01-07 22:38:

Rogad: Yes, please send the model.
David: It should be possible, and it would be interesting to see a WPF demo using Assimp.NET!

Rogad wrote at 2014-01-09 01:42:

Thanks, I have sent you a message about where to send the model too :)

objo wrote at 2014-01-24 21:32:

I think the problem is the material is not set for groups. I have submitted a fix that seems to help.

Rogad wrote at 2014-01-25 20:23:

Thanks very much, this is just to confirm the textures are working as expected. There are a couple of artefacts that show through but they are not anywhere I need to worry about as for now it's just the face and head I need. Look on the top of the head if you want an example of what I mean, also in a couple of other places, that may be more to do with the model though.

I just realised the eyebrows are not transparent, but it's using a JPG file for that, so no wonder. I will try to locate a PNG and see if that works.

Great work objo !
0

Coordinate system

Anonymous 11 years ago 0
This discussion was imported from CodePlex

lhs wrote at 2012-01-20 11:34:

Hi,

Though this is a great piece of work, I just can't figure out why is z axis pointing up. That just looks so wrong to me, am I missing something?


objo wrote at 2012-01-20 19:03:

Yes, Z is the default up direction in this library, but both HelixViewport3D and CameraController also supports Y as up direction.

I have mostly used this library for engneering/math projects, that's why I chose this convention. (I know it is common in computer graphcis to use Y up, and the default UpDirection of Media3D.ProjectionCamera is 0,1,0)


lhs wrote at 2012-01-20 19:20:

Thanks for reply.

I just thought that it was WPF related, so Y should be up...

What is the easiest way to switch the logic, without rotating models or going through every line of code?


objo wrote at 2012-01-20 19:23:

sorry, I forgot:

set ModelUpDirection="0,1,0" on your HelixViewport3D.

See the UpdirectionDemo example.


lhs wrote at 2012-01-20 19:46:

Tried that, but I get right view instead of front view. Still need to rotate models, which will mess up my transforms (long story...).

Never mind, I thought that you could save me some time, but I guess that I will have to do it myself.

Thanks anyway. Keep up the good work.


objo wrote at 2012-01-26 19:50:

sorry, I don't see the problem here. Do you need a left handed system? Let us know if there is a bug in the handling of the up direction!


przem321 wrote at 2012-01-28 00:42:

I guess the problem is that the view-cube is a little bit messed up. Usually, in graphics libraries like OpenGL and WPF, which both use a RHS (right-handed coordinate system) the Z-axis points towards the camera, the Y-axis to the sky and the X-axis to the right.  In a LHS system (like Direct3D) the Z-axis points away from the camera. In the Helix-Viewport generally everything works well except the view-cube which shows an R instead of F, B instead R, and so on, and the default camera. But one can customize the cube and the camera anyway. ...

Well, this is not a bug and also a minor issue. Personally, I would also prefer the have the front direction looking along the negative Z-axis as the very default setting, just because this is standard, not only in WPF, but also OpenGL... well I know, there is no real standard, Maya handles it differently, Blender and 3D Studio too, in truth this topic is a mess... just for this reason I stick to the coordinate-system of the libraries, and for WPF it is like explained. 

Anyway, lhs, you don't have to play around with your model transforms (if the model is in RHS), you just have to get used to the view-cube and, I recommend it, change the default camera position to something like 

 

            view.Camera.Position = new Point3D(4, 2, 16);
            view.Camera.LookDirection = new Vector3D(-4, -2, -16);
            view.Camera.UpDirection = new Vector3D(0, 1, 0);

 

Btw, we have already elaborated about the default camera here: http://helixtoolkit.codeplex.com/discussions/286186

 

PS: Maybe one could add a property to set the 'front-direction' just analogous to the 'up-direction' property? This shouldn't cause problems since the third axis would be derived automatically according to the CS?


objo wrote at 2012-01-29 09:15:

Great post! How would you implement support for a front-direction property? Apply a ScaleTransform3D(1,1,-1) to the model? Also note that there is a ViewCubeFrontText property in HelixViewport3D that can be used if you need to change the text on the faces of the view cube. 


przem321 wrote at 2012-01-31 04:23:

Yes, I think changing the text of the view-cube is the simplest way to achieve the goal. I wouldn't work with any additional transforms, the front-direction property should just imply how to set up the view-cube, i.e. setting the model-up and front-direction should imply how to setup the view cube naming, etc. This is basically not a really important issue, just cosmetics. 


RobPerkins wrote at 2012-07-05 09:22:

I've been reading and using Helix for awhile now and I'm very pleased so far. 

One thing I do need is a way to transform the coordinate system to an RHS. The display requirements I have are for X increasing to the right, Y increasing "into" the screen, and Z increasing up. It's said to be the coordinate system used by draftsmen. The one I see "by default" is a left-hand system with Y increasing towards the user. 

Is it possible to set properties for world coordinates in a Z-up RHS?  Possible to subclass HelixViewport3D for that? What approach would you suggest? Unless I'm seeing this wrong? 


objo wrote at 2012-07-07 00:48:

Isn't the ProjectionCamera only supporting LHS? I have not studied the code yet, may be wrong...

If a MatrixCamera is needed to support RHS the camera controller may need some changes.. 

I found simple explanations to LHS and RHS projection matrices in this presentation: http://users.ece.gatech.edu/lanterma/mpg10/mpglecture04f10_3dto2dproj.pdf

Direct3D has LH and RH versions of all the projection functions, e.g. http://msdn.microsoft.com/en-us/library/windows/desktop/bb204936(v=vs.85).aspx


RobPerkins wrote at 2012-07-07 01:02:

Let's see..

Helix appears to rotate the WPF default 90 degrees CCW about X, so that Z is up. I need that much, plus a -Y transformation. I can compute that at load and apply a reverse transformation during hit testing, that part is no problem.

I just need the coordinate system axes graphic to also invert the Y arrow, and I'm good to go.


przem321 wrote at 2012-07-26 15:41:

The link you have posted is somewhat misleading. WPF and OpenGL both use the RHS!!! This applies to the HelixToolkit too.


objo wrote at 2012-08-09 01:02:

Was getting confused here. Agree that WPF use RHS coordinate system for the cameras!

I see there is a need to create an example showing the different configurations...

See http://helixtoolkit.codeplex.com/workitem/9962


RobPerkins wrote at 2012-08-09 02:42:

I agree! I'm confused myself and was about to ask, with the "default" axis arrows, which color is x, which is y, which z...

I'm not the one to write that demo, though, in the confused state I'm in...


RobPerkins wrote at 2012-10-02 04:52:

RobPerkins wrote:

I agree! I'm confused myself and was about to ask, with the "default" axis arrows, which color is x, which is y, which z...

I'm not the one to write that demo, though, in the confused state I'm in...

Not confused any longer. I'd modified the axis arrows and caused my own pain. It's RHS with no problems at all once I cleared that up. 

0

how to create elliptic cylinder?

Anonymous 11 years ago 0
This discussion was imported from CodePlex

seiya wrote at 2013-08-17 22:14:

is these simple way to create elliptic cylinder?

objo wrote at 2013-08-17 22:43:

use a ScaleTransform3D on a cylinder!

seiya wrote at 2013-08-18 06:22:

that's great!
thank you very much!
0

Problem importing Materials

Anonymous 11 years ago 0
This discussion was imported from CodePlex

Nneme wrote at 2012-01-09 14:12:

Hi, how can I import accompany obj materials (.mtl)?

The documentation for "Importing" is currently empty.

The source file too does not provide any sample code only executable.

 

 


objo wrote at 2012-01-09 19:35:

Download the latest version of the source code from the "Source Code" tab. The "HelixToolkit-examples.zip" download only contains the binaries.

Placing the material files (.mtl) and textures in the same folder as the .obj file should work. Tga textures must be converted to jpeg or png.

0

future plans with WPF and sharpdx

Anonymous 11 years ago 0
This discussion was imported from CodePlex

glgweeke wrote at 2012-11-02 09:27:

Hi,

what are your plans with the sharpdx based engine.

Will it be possible to see all your current examples based on sharpdx in the future?

Have you made some performance test?

 

 

Best regards,

Gregor


objo wrote at 2012-11-02 22:29:

yes, I created an experimental fork to test SharpDX! A new world is opening up when getting access to more advanced DirectX features :)

Sorry, I have no plans to convert all examples of this library - they are made for WPF 3D!


RobPerkins wrote at 2012-11-03 18:10:

+1 for this! (I think any demos or examples would have to be significantly rewritten)


glgweeke wrote at 2012-11-03 19:53:

Hi,

examples are not so importend.

The use of DirectX for beginners is to hard.

So your work can help many developers to get quick started with DirectX and C#.

Great work!

Thanks

0

Disable resize of TextBillboardVisual3D

Anonymous 11 years ago 0
This discussion was imported from CodePlex

mplisov wrote at 2013-02-23 22:03:

Hello,

Is it possible to disable resize of TextBillboardVisual3D on camera zoom or make TextVisual3D always face the camera like TextBillboardVisual3d do?

objo wrote at 2013-03-12 12:09:

I think this should be implemented as a new class, I don't want to add more features into BillboardTextVisual3D. The code you need to change is in the BillboardGeometryBuilder.GetPositions method.
0

Compute Frustum intersections

Anonymous 11 years ago 0
This discussion was imported from CodePlex

ejleigh wrote at 2012-05-30 15:39:

Is there a correct way to compute the coordinates of the intersection of the frustum with a plane positioned somewhere between the near and the far planes? I think this should be the same as the viewport rectangle, but I can't seem to get it right. As you pan, zoom and rotate within the scene I need the coordinates of the 4 corners of the view so I can query a quadtree for assets.


objo wrote at 2012-05-30 23:16:

I was planning to add a "projected grid" example, but have not had the time to do it yet...
http://fileadmin.cs.lth.se/graphics/theses/projects/projgrid/

If you have an example where we can help to debug, feel free to create a fork!

0

PieSliceVisual3D not shown in ViewCubeVisual3D

Anonymous 11 years ago updated by ไอยดา สุรีวงค์ 4 years ago 1
This discussion was imported from CodePlex

Elemental wrote at 2011-11-11 14:05:

Hello,

I have version 72068 and there seems to be a problem with the ViewCube.

The cube is shown, but the PieSliceVisual under the cube not.

 

Is this a bug?

 

Best Regards

 


objo wrote at 2011-11-12 00:08:

You are right, I had introduced a bug when refactoring the base class. Should be corrected now!

thanks!