Thanks guys, your suggestions have been very useful.

Fabrice: Setting bothsides to true is necessary in order to obtain valid
drawTriangles, and it is what im using. And Ive thought about your second
suggestion and I will definitely implement it when I can, it could reduce
cpu cost dramatically for shadows. It would involve an algorithm that would
decide how to fill a vertex cloud...

Rob: Your two suggestions have been implemented succesfully. Ive used the
virtual face's normal to determine if it should be rendered, and while doing
this, I sorted the ones passed for rendering on their distance to the
camera. Its been very effective.

See the new DEMO: http://www.piar.com.ar/li/away/reflections/sortingsolved/
The only problem that is left is determining in what order the 3 points are
passed to the beginBitmapFill method. For this I believe I need to recognize
which point is opposite to the hypotenuse of the triangle, and then somehow
decide which is left to it and which is right to it... I have to pass p1, p2
and p3 in the right order in order to avoid scrambled faces. Do you know if
there are any inherent conventions for this in the engine? Do you remember
any part of the engine that handles anything similar to this?

On Wed, Sep 3, 2008 at 7:07 AM, Rob Bateman <[EMAIL PROTECTED]> wrote:

> Hey Li
>
>
> unfortunately i can't dive straight in here due to time constraints on
> other work, but i can point you in the direction of what you need
>
> basically your talking about two things, rear face culling and z-sorting.
> both look out of whack in your reflection demo, so heres a couple of
> pointers as to how you could fix the problem.
>
> a) face culling
>
> the method away3d uses for this is to return the calculated area of a
> drawtriangle class (the 2d representation of a face in a view). However,
> this is not going to be easy to replicate in your demo as you are drawing
> directly from face to material! One way of seeing whether a face should be
> culled is calculating the dot product of the face normal to the camera axis.
> the face normal is easily obtained - there is a property called normal on
> the face class. tranforming it to world coordinates will require a similar
> set to the one you are doing in getVertexGlobalPosition, and finding the dot
> product between it and the camera vector (the world z axis of the camera
> object (or line of sight) is easily done with the number3d methods. if the
> product is positive, the face is facing the camera and should be drawn.
> otherwise it should be discarded.
>
> b) z-sorting
>
> currently this is not done at all in your render loop - basically you need
> to sort the drawing order of faces so that the ones furthest from the camera
> are drawn first, the next further drawn next and so on. you can get the
> global position of the vertices of each face by multiplying the
> scenetranform matrix of the object by the view matrix of the camera, then
> calulate a zdepth value by averaging their z-values. duplicate and sort the
> array based on this value, and then draw each face in the correct order.
>
>
> sorry i can't be of more assistance right now - while the reflections you
> produce look great i am in no position to take this on myself atm, so i hope
> assistance in theory will be enough to point you in the right direction!
>
> atb
>
> Rob
>
>
>
> On Wed, Sep 3, 2008 at 9:16 AM, Fabrice <[EMAIL PROTECTED]> wrote:
>
>> Hey Li,The suggestion should work on the face issue... Set the cube to
>> bothsides:true if you see the projection ok, and you have set the faces in
>> right sequence order, then you are good for next step.
>>
>> The point I think here is that you try render faces that are not in the
>> loop, at some angles, you would need to see faces not in the renderlist of
>> the object.
>> In other words, you want to see the mirrored dark side of the moon.
>> So you will need here to write a class that is a flipped clone of the
>> original mesh and use that info. This should also increase speed since the
>> faces would be ready to be used at any time. They also would have a front
>> property instead of back property automatically.
>>
>> For the shadow or fills case, may be another concept worth a try:
>> Take a look at the way the outline works. So instead of drawing whole
>> geometry face by face, just collect the vertexes of the hedges, project
>> them, and read on Render the list you've composed to draw once the whole
>> shadow shape into your source destination. This would ensure almost same
>> draw speed for simple or complex objects... and since your cast image also
>> is a rectangle, you even could skip some vertexes if their are not included
>> in that rect. Note that I haven't read your code, so you might do it
>> already.
>>
>> Just thinking loud here :)
>>
>> Fabrice
>>
>> On Sep 3, 2008, at 5:38 AM, Li wrote:
>>
>> Fabrice: Ive been working with your suggestion with no success. Tryedas
>> hard as I can.... The problem seems to be reduced to finding which faces to
>> draw on the reflective plane. These are not the same faces as the ones drawn
>> on the "real" object.
>>
>> Question: Somewhere in the engine something is deciding which faces will
>> be drawn. I suppose it makes this decision based on the objects position, if
>> it is bothsided, etc. We need to apply this same logic to the "virtual"
>> object this time, created in the reflection, and simply decide which faces
>> will be drawn. Who makes this decision? And how does it create the
>> appropiate DrawTriangle once it has been passed for rendering?
>>
>> On Tue, Sep 2, 2008 at 7:09 PM, Fabrice <[EMAIL PROTECTED]> wrote:
>>
>>>
>>> well, its because you reverse the face and scramble it,
>>> to flip a face with vertexes [a b c] , make it [ b a c]
>>>
>>> as about the uv's they also required to be ordered.
>>>
>>>        uva = new UV(0, 0);//downleft
>>>        uvb = new UV(0, 1 );//topleft
>>>        uvc = new UV(1, 1);//topright
>>>        uvd = new UV(1, 0);//downright
>>>
>>> but shouldn't have to change them since you want reversed image, just
>>> flip the face and you will be fine, otherwize if needed
>>> flip order uvs on the exact same way as vertexes following the same
>>> sequence.
>>>
>>> Take a look at Lathe class, many examples of combinations in there.
>>>
>>> //My head is about to explode!!
>>> Take a break, you've done enough for today :))
>>>
>>> Fab
>>>
>>>
>>>
>>>
>>>
>>> On Sep 2, 2008, at 11:08 PM, Li wrote:
>>>
>>>
>>>> Ok, Im completely stuck here. My head is about to explode!!
>>>>
>>>> You can see the problem I have in this DEMO:
>>>> http://www.piar.com.ar/li/away/reflections/theproblem/
>>>> As I tryed to explain before, im having problems when redrawing the
>>>> reflected object's materials on the plane. With wirecolormaterials Im
>>>> only having trouble with sorting, but with moviematerials Im also
>>>> having trouble with the orientation of the vertices in the
>>>> beginbitmapfill method.
>>>>
>>>> Ive made a big effort to make the source organized and have lots of
>>>> comments, so, here it is:
>>>> http://www.piar.com.ar/li/away/reflections/theproblem/AdvancedReflections.zip
>>>>
>>>> I believe that if someone familiar enough with the engine's core grabs
>>>> this, the problem would be resolved easily and quickly... A little
>>>> help and we're done!
>>>>
>>>> On Sep 2, 3:30 pm, Li <[EMAIL PROTECTED]> wrote:
>>>>
>>>>> Thanks Peter, and everyone else for the positive replyes...
>>>>>
>>>>> Here it is with an jpeg as bumpmap:
>>>>> http://www.piar.com.ar/li/away/reflections/bumpwithimage/
>>>>>
>>>>> On Tue, Sep 2, 2008 at 3:07 PM, Rob Bateman <[EMAIL PROTECTED]>
>>>>> wrote:
>>>>>
>>>>>> very cool! love it.
>>>>>>
>>>>>
>>>>>  Rob
>>>>>>
>>>>>
>>>>>  On Tue, Sep 2, 2008 at 6:56 PM, Jensa <[EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>
>>>>>  Awesome job Li! Keep at it!
>>>>>>>
>>>>>>
>>>>>  J
>>>>>>>
>>>>>>
>>>>>  --
>>>>>> Rob Bateman
>>>>>> Flash Development & Consultancy
>>>>>>
>>>>>
>>>>>  [EMAIL PROTECTED]
>>>>>> www.infiniteturtles.co.uk
>>>>>> www.away3d.com
>>>>>>
>>>>>
>>>
>>
>>
>
>
> --
> Rob Bateman
> Flash Development & Consultancy
>
> [EMAIL PROTECTED]
> www.infiniteturtles.co.uk
> www.away3d.com
>

Reply via email to