draw mesh at 0,0,-1000 opengl / webgl

Started by
0 comments, last by giugio 12 years, 8 months ago
hello.
I have this test webgl vertex shader:


<script id="TextureEffectv" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
attribute vec3 aVertexNormal;
attribute vec2 aTextureCoord;

uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform mat3 uNMatrix;

uniform vec3 uAmbientColor;
uniform vec3 uLightingDirection;
uniform vec3 uLightingDirection2;
uniform vec3 CameraModelPosition;

uniform vec3 ColorFront;
uniform vec3 ColorBack;
varying vec3 transformedNormal;
varying vec3 vLightWeighting;
varying vec3 vLightWeightingback;
varying vec2 vTextureCoord;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);

vTextureCoord = aTextureCoord;
vec3 uDirectionalColor = vec3(1,1,1);
transformedNormal = uNMatrix * aVertexNormal;

float directionalLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0) ;
vLightWeighting = uDirectionalColor * directionalLightWeighting * ColorFront ;

float directionalLightWeighting2 = max(dot(transformedNormal, uLightingDirection2), 0.0) ;
vLightWeighting += uDirectionalColor * directionalLightWeighting2 * ColorFront ;

float directionalLightWeightingback = max(dot(transformedNormal, uLightingDirection), 0.0) ;
vLightWeightingback = uDirectionalColor * directionalLightWeightingback * ColorBack ;

float directionalLightWeighting2back = max(dot(transformedNormal, uLightingDirection2), 0.0) ;
vLightWeightingback += uDirectionalColor * directionalLightWeighting2back * ColorBack ;
}
</script>



Now i would draw a mesh at 0,0,-1000 without the gllookat or glorto.
I have only the uMVMatrix for do this, is sufficent?
how i can change the word view matrix for draw the mesh at 0,0,-1000?
I know that the camera position is the inverse of the word view matrix?
but... i 'm not understand at all
thanks.
Advertisement

hello.
I have this test webgl vertex shader:


<script id="TextureEffectv" type="x-shader/x-vertex">
attribute vec3 aVertexPosition;
attribute vec3 aVertexNormal;
attribute vec2 aTextureCoord;

uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform mat3 uNMatrix;

uniform vec3 uAmbientColor;
uniform vec3 uLightingDirection;
uniform vec3 uLightingDirection2;
uniform vec3 CameraModelPosition;

uniform vec3 ColorFront;
uniform vec3 ColorBack;
varying vec3 transformedNormal;
varying vec3 vLightWeighting;
varying vec3 vLightWeightingback;
varying vec2 vTextureCoord;
void main(void) {
gl_Position = uPMatrix * uMVMatrix * vec4(aVertexPosition, 1.0);

vTextureCoord = aTextureCoord;
vec3 uDirectionalColor = vec3(1,1,1);
transformedNormal = uNMatrix * aVertexNormal;

float directionalLightWeighting = max(dot(transformedNormal, uLightingDirection), 0.0) ;
vLightWeighting = uDirectionalColor * directionalLightWeighting * ColorFront ;

float directionalLightWeighting2 = max(dot(transformedNormal, uLightingDirection2), 0.0) ;
vLightWeighting += uDirectionalColor * directionalLightWeighting2 * ColorFront ;

float directionalLightWeightingback = max(dot(transformedNormal, uLightingDirection), 0.0) ;
vLightWeightingback = uDirectionalColor * directionalLightWeightingback * ColorBack ;

float directionalLightWeighting2back = max(dot(transformedNormal, uLightingDirection2), 0.0) ;
vLightWeightingback += uDirectionalColor * directionalLightWeighting2back * ColorBack ;
}
</script>



Now i would draw a mesh at 0,0,-1000 without the gllookat or glorto.
I have only the uMVMatrix for do this, is sufficent?
how i can change the word view matrix for draw the mesh at 0,0,-1000?
I know that the camera position is the inverse of the word view matrix?
but... i 'm not understand at all
thanks.

I'm expalin better:

void Camera::updateViewMatrix()
{
// Reconstruct the view matrix.

m_viewMatrix = m_orientation.toMatrix4();

m_xAxis.set(m_viewMatrix[0][0], m_viewMatrix[1][0], m_viewMatrix[2][0]);
m_yAxis.set(m_viewMatrix[0][1], m_viewMatrix[1][1], m_viewMatrix[2][1]);
m_zAxis.set(m_viewMatrix[0][2], m_viewMatrix[1][2], m_viewMatrix[2][2]);
m_viewDir = -m_zAxis;

if (m_behavior == CAMERA_BEHAVIOR_ORBIT)
{
// Calculate the new camera position based on the current
// orientation. The camera must always maintain the same
// distance from the target. Use the current offset vector
// to determine the correct distance from the target.

m_eye = m_target + m_zAxis * m_orbitOffsetDistance;
}

m_viewMatrix[3][0] = -Vector3::dot(m_xAxis, m_eye);
m_viewMatrix[3][1] = -Vector3::dot(m_yAxis, m_eye);
m_viewMatrix[3][2] = -Vector3::dot(m_zAxis, m_eye);
}

i choose the m_behavior == CAMERA_BEHAVIOR_ORBIT use of the camera.
the orientation is the orientation of the camera in quaternion m_orientation.toMatrix4(); .
the camera have a CRender class reference and, this.m_render.UpdateFromCamera(this); calls the CRender class
get the matrixes from the camera(the CRender class have also a reference to camera object)then draw the mesh in the scene with those matrixes.

The problem is this:
I use a shader for drawing the mesh and create an orbit camera system.
the model is always at 0;0;0 or other arbitrary positions, the thing that change is the camera (orientation and position) i can set the orientation and position in the MVMatrix , but if i place those how i can draw the mesh at 0;0;0 ??
How i can draw the mesh at 0;0;0 and apply the Model view matrix that return my camera object and have the eye position and camera orientation?
thanks.

This topic is closed to new replies.

Advertisement