Script Reference guide for Procedural Modeling.

About Truespace Archives

These pages are a copy of the official truespace forums prior to their removal somewhere around 2011.

They are retained here for archive purposes only.

Script Reference guide for Procedural Modeling. // Archive: Tech Forum

1  2  3  |  

Post by Délé // Feb 15, 2006, 10:06am

Délé
Total Posts: 1374
pic
Thanks Peter. :) I'm looking in on this stuff you're posting too. Nice of you to swing by and help out.

Well, I came across what I thought might be a helpful website to some of those others looking into diving in deep. :) I just perused through it but it looks like it has some good info on some 3d mathematics.

http://chortle.ccsu.edu/VectorLessons/vectorIndex.html

Post by Johny // Feb 16, 2006, 8:24pm

Johny
Total Posts: 672
pic
Peter, thanks for complete renderable script plane. :)

I also have another question:"So far we just make a triangle faces. is it posible to script out a non triagle face?"


Hey De'le', thanks for the usefull link :)

Post by tomasb // Feb 16, 2006, 10:58pm

tomasb
Total Posts: 261
"So far we just make a triangle faces. is it posible to script out a non triagle face?"


Yes. Triangle stream group contains triange edge stream that says for each triangle which edge is boundary. If this stream is not present, all edges become boundary by default (triangles).

For example, when you want to create quad with triangle vertex indices 0,1,2 and 0,2,3; triangle edges stream will contain this (in binnary):

011 [edge 2-0 is not set, edges 1-2 and 0-1 are set]

110 [edges 2-3 and 3-0 are set, edge 0-2 is not set]



Beware, that neighboring triangles should have common edge both set or not. Otherwise it may confuse PE selection tools or SDS.


hth.

Post by Johny // Feb 17, 2006, 7:42pm

Johny
Total Posts: 672
pic
Tomas Bujnak, thanks for the answer and explaination about Triangle Edge Stream.

I already search it from sample script object that come with ts7, but I didn't found any sample script object used this triangle edge stream. So I didn't know how to use it on script object.

Can You post some codes that change above script plane object become not triangle object?

Post by Leif // Feb 17, 2006, 7:48pm

Leif
Total Posts: 276
pic
Wow have you checked the view number for this thread ? Must be popular topic!

Post by Johny // Feb 20, 2006, 7:07am

Johny
Total Posts: 672
pic
I tried with this code :



dE=System.CreateDO("Space 3D Package/Face Edges Stream Data");

dE.SetNumTriangleEdges(2);

dE.edges(0,2);

...


But I got error on code dE.edges(0,2);


Can anybody help me to solve this problem:confused:

(I need non triagle face for use with sweep tool.:rolleyes:

Post by scapino // Feb 20, 2006, 8:08pm

scapino
Total Posts: 101
pic
dE=System.CreateDO("Space 3D Package/Face Edges Stream Data");

dE.SetNumTriangleEdges(2);

dE.edges(0.2);

...


Looks like theres a . (period), instead of a comma in dE.edges(0.2);


Kurt

Post by peterma // Feb 22, 2006, 1:14am

peterma
Total Posts: 48
I tried with this code :



dE=System.CreateDO("Space 3D Package/Face Edges Stream Data");

dE.SetNumTriangleEdges(2);

dE.edges(0,2);

...


But I got error on code dE.edges(0,2);



I tested that and yes - edges is a property so you should use this format to set the value


dE.edges(0) = 2


or this one to read the value


myVal = dE.edges(0)


I do agree this is not easy to deduct from our code competion methods list, where methods and properties are not distingished. I'll try to improve this.

For now a little hepler - when you see 2 same methods in the code completion list and they differ in number of parameters, most likely it represents get and set property forms and you should use it like property.

Post by Johny // Feb 24, 2006, 5:30am

Johny
Total Posts: 672
pic
Peter, thanks for the explanation about how to use/read code auto complete options. ;)

But I still failed to script out a non triangle object :(
is "Face Edges Stream Data" can be use to make something like Tomas wrote in this post click here (http://forums1.caligari.com/truespace/showpost.php?p=2296&postcount=33)?

Post by peterma // Feb 24, 2006, 8:11am

peterma
Total Posts: 48
this is a working example. Check it in wireframe mode.

Post by Asem // Feb 24, 2006, 9:01am

Asem
Total Posts: 255
From Script:

// edges

dE=System.CreateDO("Space 3D Package/Face Edges Stream Data");
dE.SetNumTriangleEdges(2);

dE.edges(0) = 3 // 011 binary
dE.edges(1) = 6 // 110 binary

I understand where the numbers are coming from but can you explain more on how it is connecting the edges. Is 011 related to the vertice stream or the triangle stream?How does it relate to them? :confused:

I did a plane of my own with triangles and have figured how to use the vertices and triangles steams but now this is confusing.

Post by tomasb // Feb 24, 2006, 9:18am

tomasb
Total Posts: 261
I understand where the numbers are coming from but can you explain more on how it is connecting the edges. Is 011 related to the vertice stream or the triangle stream?How does it relate to them? :confused:


I did a plane of my own with triangles and have figured how to use the vertices and triangles steams but now this is confusing.


Edge stream specifies, which edges are "on" and which are "off" for each triangle. You need to make sure, that edge and it's corresponding pair are both On or Off.


N-th bit set means, that there is edge P[N],P[(N+1) mod 3] (where P are triangle indices) in the mesh.

Post by Asem // Feb 24, 2006, 10:57am

Asem
Total Posts: 255
Edge stream specifies, which edges are "on" and which are "off" for each triangle. You need to make sure, that edge and it's corresponding pair are both On or Off.

N-th bit set means, that there is edge P[N],P[(N+1) mod 3] (where P are triangle indices) in the mesh.
Okay, so should I see it as:

dE.edges(P) = N mod 3;

Where if you look at N as 3 binary bits:

P is 0

1st_bit 0 = P i
2nd_bit 1 = P j
3rd_bit 1 = P k

Where then 011 is 3 because from right to lift 2^0 + 2^1 + 0.

Correct me if I'm wrong and if that is the case why have dE.edges(0) when in the script dE.edges seems to be the one to actually remove the edge that makes it a triangle? Unless you have to at least specify two.

Post by tomasb // Feb 24, 2006, 11:21am

tomasb
Total Posts: 261
One image that may make it clear.


It shows 1 polygon that consists of 4 triangles.

Polygon has vertices with indices 0,1,2,5,4,3.

internal edges are 1,3; 3,1; 1,4; 4,1; 2,4; 4,2. (not boundary)

boundary edges are 0,1; 1,2; 2,5; 5,4; 4,3; 3,0


Internal edges DON'T have the flag set, boundary have.


triangles stream (index: i,j,k):

0: 0,1,3

1: 1,4,3

2: 1,2,4

3: 2,5,4


corresponding face edges stream (triangles: bits for edge ki,jk,ij):

0: 101 (edge 0,1 set; edge 3,0 set)

1: 010 (edge 4,3 set)

2: 001 (edge 1,2 set)

3: 011 (edge 2,5 set; edge 5,4 set).


if you want to know if triangle T contains edge between vertices triangles[T].P[i] and triangles[T].P[(i+1) % 3] that is on polygon boundary, then take face edges stream and check, if bit P is set. (dE.edges(T) & (1 << p)). If it is not set, that means that edge is inside polygon.


{note that P[0] = i, P[1] = j, P[2] = k}

Post by Asem // Feb 24, 2006, 11:53am

Asem
Total Posts: 255
Thanks that completly explained it :D It was actually confusing because I didn't know that the bits were grouped this way " corresponding face edges stream (triangles: bits for edge ki,jk,ij)."

Someone should start something at wikipedia,there's a lot of info here :D

Post by Johny // Feb 25, 2006, 3:12am

Johny
Total Posts: 672
pic
Peter, thanks again for your help.


Here is screen grap of obj panel and RsObj file of my script plane object.

Post by peterma // Feb 26, 2006, 10:13am

peterma
Total Posts: 48
Very nice, we have perfect plane now :)

Post by SiRender // Feb 26, 2006, 1:40pm

SiRender
Total Posts: 38
Peter, thanks again for your help.


Here is screen grap of obj panel and RsObj file of my script plane object.


When I use "Double Size Plane" it looks strange. Does anyone know what's going on?

Post by Cayenne // Feb 26, 2006, 2:33pm

Cayenne
Total Posts: 144
pic
I think it is showing like this as there is currently no uv co-ordinates for the object, if you apply planar uv to the plane then the "strangeness" goes away

Post by Johny // Feb 26, 2006, 5:33pm

Johny
Total Posts: 672
pic
SiRender, temporay you can fix it by apply a material to plane object.:rolleyes:


Peter, I tried to add UV coordinat to the script plane but I don't know how to attatch it to plane mesh :confused:



// try to fix UV problem at double size script plane object

function OnComputeOutputs(params)

{

inSize = params.ConValue('inSize');



// vertices


dV = System.CreateDO("Space 3D Package/Vertex Stream Data");

dV.SetNumVertices(4);



dV.x(0)=0;

dV.y(0)=0;

dV.z(0)=1;


dV.x(1)=inSize;

dV.y(1)=0;

dV.z(1)=1;


dV.x(2)=inSize

dV.y(2)=inSize

dV.z(2)=1;


dV.x(3)=0;

dV.y(3)=inSize

dV.z(3)=1;


dUV = System.CreateDO("Space 3D Package/UV Coordinate Stream Data");

dUV.SetNumUVCoords(4);

dUV.u(0)=0;

dUV.v(0)=0;

dUV.u(1)=1;

dUV.v(1)=0;

dUV.u(2)=1;

dUV.v(2)=1;

dUV.u(3)=0;

dUV.v(3)=1;



dTUV = System.CreateDO("Space 3D Package/UV Triangle Stream Data");

dTUV.SetNumUVTripleIndices(4);

dTUV.i(0)=0;

dTUV.j(0)=2;

dTUV.k(0)=3;


dTUV.i(1)=0;

dTUV.j(1)=2;

dTUV.k(1)=3;



dTUV.i(2)=0;

dTUV.j(2)=1;

dTUV.k(2)=2;


dTUV.i(3)=0;

dTUV.j(3)=2;

dTUV.k(3)=3;


// triangles


dF = System.CreateDO("Space 3D Package/Triangle Vertices Stream Data");

dF.SetNumTripleIndices(4);


dF.i(0)=0;

dF.j(0)=1;

dF.k(0)=2;


dF.i(1)=0;

dF.j(1)=2;

dF.k(1)=3;



dF.i(2)=1;

dF.j(2)=3;

dF.k(2)=2;


dF.i(3)=1;

dF.j(3)=0;

dF.k(3)=3;


// edges


dE=System.CreateDO("Space 3D Package/Face Edges Stream Data");

dE.SetNumTriangleEdges(4);


dE.edges(0) = 3 // 011 binary

dE.edges(1) = 6 // 110 binary

dE.edges(2) = 6 // 011 binary

dE.edges(3) = 3 // 110 binary


dM=System.CreateDO("Space 3D Package/Mesh Data");

dM.AttachVerticesStream(dV);

dM.AttachTrianglesStream(dF);

dM.AttachTrianglesStream(dE);

// dM.AttachFacesStream(dTUV);


params.ConValue('outMesh') = dM;

}

Post by SiRender // Feb 26, 2006, 11:28pm

SiRender
Total Posts: 38
Ah. Yea, it was the UV.


Johny, I didn't try your code yet. But, I noticed that when I apply the UV planar map, the internal connection between "Plane Mesh" and "Shape" gets removed in the object -- so your code solution will be nice. :)


EDIT: actually the connection gets removed I think if you go into point edit mode in the model view

Post by peterma // Feb 27, 2006, 12:41am

peterma
Total Posts: 48
Peter, I tried to add UV coordinat to the script plane but I don't know how to attatch it to plane mesh :confused:



Johny, UV stream is a custom stream in Rosetta mesh model, and so far we don't have good access methods for manipulating such a stream from scripts. Tomas is working on it and it should be fixed in tS7.02 patch.

Post by Johny // Feb 27, 2006, 1:49am

Johny
Total Posts: 672
pic
Thanks for let me know about that. ;)


Now I must wait until the next patch.:cool:


Talk about next patch, I have request for primitive plane object with X and Y resolution parameters. And primitive cube object with X,Y and Z resulution parameters.


like on this image:D

Post by tomasb // Feb 27, 2006, 2:12am

tomasb
Total Posts: 261
Thanks for let me know about that. ;)


Now I must wait until the next patch.:cool:




Adding custom streams is possible, but not reading them because there are problems with sending GUID*.. you CAN make the plane object with UV coordinates with current version.


Use AttachCustStream in your plane script to add UV data and AddTrianglesStream to add UV indices to UV data..

.

.

dM.AttachTrianglesStream(dTUV);

dM.AttachCustStream(dUV);

.

.

Post by Johny // Feb 27, 2006, 5:28am

Johny
Total Posts: 672
pic
TomasB, I already followed your suggestion but that's nothing changed as you can see at bellow image. :confused:


With this post, I also attach the tested RsObj file. So You can also check it by yourself.:rolleyes:

Post by marekk // Feb 28, 2006, 11:17pm

marekk
Total Posts: 10
This is observable in Player only as far as I know. Calculation of UV on planar object (which is in fact 2D) is numerically unstable. The problem is not located yet, but it can be avoided by using very thin box instead plane, with planar or cubic UV mapping.

Post by SiRender // Mar 1, 2006, 10:57pm

SiRender
Total Posts: 38
Ah. So it's like when I move two objects so a couple coplanar faces align. The round error from the underlying algorithms bubbling up as it tries to figure out who's point is visible from each face, right? :)


Why does applying a planar UV fix it though as the others suggested?


Thanks!

Post by Johny // Apr 4, 2006, 1:00am

Johny
Total Posts: 672
pic
Anyone know how to use IRdInputState's "GeyKeyState" for capture input from keyboard?

Post by tomasb // Apr 4, 2006, 1:26am

tomasb
Total Posts: 261
Anyone know how to use IRdInputState's "GeyKeyState" for capture input from keyboard?


A bit unintended usage for that DO, but... create IRdInputState data object.

Param for GetKeyState is virtual key code. It just calls GetAsyncKeyState, so you can check MSDN for virtual key codes. return is bool which is true if key is pressed, false otherwise.

Post by Johny // Apr 4, 2006, 3:51am

Johny
Total Posts: 672
pic
Tomasb, thanks for the information, I will check it :)
Awportals.com is a privately held community resource website dedicated to Active Worlds.
Copyright (c) Mark Randall 2006 - 2024. All Rights Reserved.
Awportals.com   ·   ProLibraries Live   ·   Twitter   ·   LinkedIn