Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

Multiplying by Modelview Matrix Gives Unexpected result

Posted on 2008-06-17
5
Medium Priority
?
1,051 Views
Last Modified: 2013-12-26
In a previous question (http://www.experts-exchange.com/Programming/Game/3D_Prog./Q_23489987.html)
I asked how to find the coordinates of an object after undergoing a transform.

To do this I had to multiply the point I wanted to translate by the modelview matrix. The issue is that the values I get back are the opposite to what's occuring on the screen. ie. if the objects are rotated clockwise on the screen the results I get back are moving anticlockwise.

Do I need to Invert the modelview matrix or somthing like that? Could someone provide code to aid me in this?

//function to do multiplication
 
#include <gl/gl.h>
 
void MultiplyVMatrix(GLfloat* Vertex, GLfloat* Matrix, GLfloat* ResultMatrix)
{
     
      for(int i=0;i<16;i++)
                ResultMatrix[i/4]+=Matrix[i]*Vertex[i%4];
 
}        
 
**************************************************************
//modelview matrix and multiply co-ordinate of cube
 
GLfloat matrix[16];
GLfloat vertex[4]={1,2,-5,1}; //any co-ordinate for testing
GLfloat resultmatrix[4]={0,0,0,0};
 
glGetFloatv(GL_MODELVIEW_MATRIX, matrix); //grab the modelview matrix
 
MultiplyVMatrix(vertex,matrix,resultmatrix);

Open in new window

0
Comment
Question by:Jamsb
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
  • 2
5 Comments
 
LVL 2

Author Comment

by:Jamsb
ID: 21803397
That's twice I've posted wrongly.

*Correction*
GLfloat vertex[4]={1,2,-5,1};
0
 
LVL 22

Accepted Solution

by:
NovaDenizen earned 600 total points
ID: 21813276
I think your problem is that you think the matrix is in row major order, but it is actually in column major order.  

see http://www.opengl.org/sdk/docs/man/xhtml/glLoadMatrix.xml to see this illustrated.

That would mean that tou want ResultMatrix[i%4] += Matrix[i]*Vertex[i/4]
0
 
LVL 2

Author Comment

by:Jamsb
ID: 21816770
I feel so stupid now! Its hard trying to imagine what's going wrong with all this Matrix math!  Thanks very much :)
0
 
LVL 2

Author Closing Comment

by:Jamsb
ID: 31467925
Exactly what I wanted.
0
 
LVL 22

Expert Comment

by:NovaDenizen
ID: 21816875
The only reason I know to look for this is that I did something very similar a few weeks ago, so don't feel too bad.
0

Featured Post

Survive A High-Traffic Event with Percona

Your application or website rely on your database to deliver information about products and services to your customers. You can’t afford to have your database lose performance, lose availability or become unresponsive – even for just a few minutes.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

How to Win a Jar of Candy Corn: A Scientific Approach! I love mathematics. If you love mathematics also, you may enjoy this tip on how to use math to win your own jar of candy corn and to impress your friends. As I said, I love math, but I gu…
We are taking giant steps in technological advances in the field of wireless telephony. At just 10 years since the advent of smartphones, it is crucial to examine the benefits and disadvantages that have been report to us.
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…

715 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question