Sunday 15 January 2012

c - How to implement glMultMatrixf -


I am working on the matrix product function and I'm new to C. This is who I came with ... Static Float * Current Metrics; ... glMultMatrixf (const float * m) {int i; Int i2 = 0; Int i3 = 0; Float result [16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}; Printf ("start \ n"); For (i = 0; i <(MATRIX_HEIGHT); i ++) {float dot product = 0.0 f; For (i2 = 0; i2 & lt; (MATRIX_WIDTH); i2 ++) {float dot product = 0.0 f; (I3 = 0; i3 & lt; (MATRIX_WIDTH); i3 ++) {dot product = = metatrix [i3 + i * 4] * m [i3 * 4 + i2]; } Results [i2 + i * 4] = dotProduct; }} Current Matrix = & amp; Results [0]; Printf ("Finish \ n"); }

Of course this fails due to the scope of the result.

This works ...

 Fixed float * current matrix; Float result [16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }}; ... glMultMatrixf (const float * m) {int i; Int i2 = 0; Int i3 = 0; Printf ("start \ n"); For (i = 0; i <(MATRIX_HEIGHT); i ++) {float dot product = 0.0 f; For (i2 = 0; i2 & lt; (MATRIX_WIDTH); i2 ++) {float dot product = 0.0 f; (I3 = 0; i3 & lt; (MATRIX_WIDTH); i3 ++) {dot product = = metatrix [i3 + i * 4] * m [i3 * 4 + i2]; } Results [i2 + i * 4] = dotProduct; }} Current Matrix = & amp; Results [0]; Printf ("Finish \ n"); }   

But this does not seem right because if more than one threads are calling the function at the same time, then it seems that there can be problems (remember that I New)

So I do not really know the correct way to stop JC from destroying those things. I can definitely be iterative through the floating array and set the value in the regular array, but Is it ineligible to have a better way of handling it?

The implementation is here: [R] = & gt; Matrix 4_mool (R, A, B);
Simple ISO C90 Result: (r) may be alias (x) and / or (y) . It has not been tested:

  / * inline * / zero matrix 4_mool (float r [16], const float one [16], cost float b [16]) {float t [ 16]; / * (TMP result) * / Ent I, J, K; For (float * ai = a + (i * 4); float * ti = t + (i * 4); for (i = 0; i & lt; 4; i ++); (j = 0; J & lt; 4; J ++) {for float tees = 0.0; (k = 0; k   

Any major key versus multiple-major problems are only [A] and [b] .


If you want to mimic the behavior of glMultMatrixf , then you have to Tman is required to maintain the concept of matrix / matrix stack. At least this function can actual closing.

No comments:

Post a Comment