Solved

Am I Doing this Matrix Multiplication Correctly?

Posted on 2008-06-16
11
1,951 Views
Last Modified: 2013-12-26
Basically I have written a class to draw a cube centered on a point (XYZ). I perform various tranlations on my scene using glTranslate/glRotate. Now I want to calculate the new position of the cube ("world co-ordinates" if that is the right term.)

It has been suggested that I should multiple the Point by the Modelviewmatrix I have achieved this by doing the following (see code).

Is this code correct and will it do what I want it to?


//function to do multiplication
 
#include <gl/gl.h>
 
void MultiplyVMatrix(GLfloat* Vertex, GLfloat* Matrix, GLfloat* ResultMatrix)
{
	for(int i=0;i<16;i++)
		for(int j=0;j<4;j++)
		ResultMatrix[j]+=Matrix[i]*Vertex[j];
 
}        
 
**************************************************************
//modelview matrix and multiply co-ordinate of cube
 
GLfloat matrix[16];
GLfloat vertex[4]={1,2,-5,0}; //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

translation.gif
0
Comment
Question by:Jamsb
  • 6
  • 5
11 Comments
 
LVL 84

Expert Comment

by:ozo
ID: 21798598
No
0
 
LVL 2

Author Comment

by:Jamsb
ID: 21798607
OK I will be more specific. If this does not work. What SHOULD I be doing?
0
 
LVL 2

Author Comment

by:Jamsb
ID: 21798667
I would increase points on the question if i could...
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
LVL 2

Author Comment

by:Jamsb
ID: 21798714
GLfloat vertex[4]={1,2,-5,0}; //any co-ordinate for testing

should read:
GLfloat vertex[4]={1,2,-5,1}; //any co-ordinate for testing
0
 
LVL 84

Accepted Solution

by:
ozo earned 100 total points
ID: 21798721
      for(int i=0;i<16;i++)
                ResultMatrix[i/4]+=Matrix[i]*Vertex[i%4];
0
 
LVL 2

Author Comment

by:Jamsb
ID: 21800636
ozo:

Can you explain your code please? in particular the following  "ResultMatrix[i/4]".
0
 
LVL 84

Expert Comment

by:ozo
ID: 21800675
The the first four results, (i=0,1,2,3) go into ResultMatrix[0]
the next four (i=4,5,6,7) go into ResultMatrix[1]
etc.
0
 
LVL 2

Author Comment

by:Jamsb
ID: 21800681
Im going to assume that that should be a modulo. So what was broken? and how did your code fix it?
0
 
LVL 84

Expert Comment

by:ozo
ID: 21800758
one is divide, one is moduo
I presumed that
ResultMatrix = Matrix *Vertex
and that Matrix was laid out as
m0  m4  m8  m12
m1  m5  m9  m13
m2  m6  m10 m14
m3  m7 m11  m15

the original code was equivalent to multiplying each element by
(m0+m1+m2+m3+m4+m5+...+m15)
0
 
LVL 84

Expert Comment

by:ozo
ID: 21800808
0
 
LVL 2

Author Closing Comment

by:Jamsb
ID: 31467816
OK. Figured it out. I'm still a newbie :)
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Will Java Webstart launch my game? 6 135
Game Asset Design and Performance. 7 166
triangle challenge 4 177
Any Advice on Sonar / DAW freaky instruments? 2 79
Artificial Intelligence comes in many forms, and for game developers, Path-Finding is an important ability for making an NPC (Non-Playable Character) maneuver through terrain.  A* is a particularly easy way to approach it.  I’ll start with the algor…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Two types of users will appreciate AOMEI Backupper Pro: 1 - Those with PCIe drives (and haven't found cloning software that works on them). 2 - Those who want a fast clone of their boot drive (no re-boots needed) and it can clone your drive wh…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

856 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