Attempt to fix orientations.
This commit is contained in:
parent
f4eeb68fd4
commit
1bac60c48a
@ -1,13 +1,16 @@
|
||||
const float DEG2GRAD = 3.14 / 180.;
|
||||
|
||||
|
||||
mat4 getMatrixFromRotation(vec3 rotation)
|
||||
{
|
||||
|
||||
// from irrlicht
|
||||
float cr = cos( rotation.z );
|
||||
float sr = sin( rotation.z );
|
||||
float cp = cos( rotation.x );
|
||||
float sp = sin( rotation.x );
|
||||
float cy = cos( rotation.y );
|
||||
float sy = sin( rotation.y );
|
||||
float cr = cos(DEG2GRAD * rotation.x );
|
||||
float sr = sin(DEG2GRAD * rotation.x );
|
||||
float cp = cos(DEG2GRAD * rotation.y );
|
||||
float sp = sin(DEG2GRAD * rotation.y );
|
||||
float cy = cos(DEG2GRAD * rotation.z );
|
||||
float sy = sin(DEG2GRAD * rotation.z );
|
||||
|
||||
float srsp = sr*sp;
|
||||
float crsp = cr*sp;
|
||||
|
@ -508,7 +508,9 @@ namespace MeshShader
|
||||
GLuint InstancedObjectPass1Shader::Program;
|
||||
GLuint InstancedObjectPass1Shader::attrib_position;
|
||||
GLuint InstancedObjectPass1Shader::attrib_normal;
|
||||
GLuint InstancedObjectPass1Shader::attrib_orientation;
|
||||
GLuint InstancedObjectPass1Shader::attrib_origin;
|
||||
|
||||
GLuint InstancedObjectPass1Shader::uniform_MP;
|
||||
GLuint InstancedObjectPass1Shader::uniform_VM;
|
||||
|
||||
@ -520,6 +522,7 @@ namespace MeshShader
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/encode_normal.frag").c_str(),
|
||||
GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/object_pass1.frag").c_str());
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_normal = glGetAttribLocation(Program, "Normal");
|
||||
uniform_MP = glGetUniformLocation(Program, "ViewProjectionMatrix");
|
||||
@ -621,6 +624,7 @@ namespace MeshShader
|
||||
GLuint InstancedObjectPass2Shader::attrib_position;
|
||||
GLuint InstancedObjectPass2Shader::attrib_texcoord;
|
||||
GLuint InstancedObjectPass2Shader::attrib_origin;
|
||||
GLuint InstancedObjectPass2Shader::attrib_orientation;
|
||||
GLuint InstancedObjectPass2Shader::uniform_VP;
|
||||
GLuint InstancedObjectPass2Shader::uniform_TM;
|
||||
GLuint InstancedObjectPass2Shader::uniform_screen;
|
||||
@ -637,6 +641,7 @@ namespace MeshShader
|
||||
attrib_position = glGetAttribLocation(Program, "Position");
|
||||
attrib_texcoord = glGetAttribLocation(Program, "Texcoord");
|
||||
attrib_origin = glGetAttribLocation(Program, "Origin");
|
||||
attrib_orientation = glGetAttribLocation(Program, "Orientation");
|
||||
uniform_VP = glGetUniformLocation(Program, "ViewProjectionMatrix");
|
||||
uniform_TM = glGetUniformLocation(Program, "TextureMatrix");
|
||||
GLuint uniform_Albedo = glGetUniformLocation(Program, "Albedo");
|
||||
|
@ -81,7 +81,7 @@ class InstancedObjectPass1Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_normal, attrib_origin;
|
||||
static GLuint attrib_position, attrib_normal, attrib_origin, attrib_orientation;
|
||||
static GLuint uniform_MP, uniform_VM;
|
||||
|
||||
static void init();
|
||||
@ -115,7 +115,7 @@ class InstancedObjectPass2Shader
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_origin;
|
||||
static GLuint attrib_position, attrib_texcoord, attrib_origin, attrib_orientation;
|
||||
static GLuint uniform_VP, uniform_TM, uniform_screen, uniform_ambient;
|
||||
static GLuint TU_Albedo;
|
||||
|
||||
|
@ -62,8 +62,10 @@ void STKInstancedSceneNode::initinstancedvaostate(GLMesh &mesh, GeometricMateria
|
||||
glBindBuffer(GL_ARRAY_BUFFER, instances_vbo);
|
||||
glBufferData(GL_ARRAY_BUFFER, instance_pos.size() * sizeof(float), instance_pos.data(), GL_STATIC_DRAW);
|
||||
glEnableVertexAttribArray(MeshShader::InstancedObjectPass1Shader::attrib_origin);
|
||||
glVertexAttribPointer(MeshShader::InstancedObjectPass1Shader::attrib_origin, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), 0);
|
||||
glVertexAttribPointer(MeshShader::InstancedObjectPass1Shader::attrib_origin, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), 0);
|
||||
glVertexAttribDivisor(MeshShader::InstancedObjectPass1Shader::attrib_origin, 1);
|
||||
glVertexAttribPointer(MeshShader::InstancedObjectPass1Shader::attrib_orientation, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (GLvoid*)(3 * sizeof(float)));
|
||||
glVertexAttribDivisor(MeshShader::InstancedObjectPass1Shader::attrib_orientation, 1);
|
||||
break;
|
||||
case FPSM_GRASS:
|
||||
mesh.vao_first_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer,
|
||||
@ -92,6 +94,8 @@ void STKInstancedSceneNode::initinstancedvaostate(GLMesh &mesh, GeometricMateria
|
||||
glEnableVertexAttribArray(MeshShader::InstancedObjectPass2Shader::attrib_origin);
|
||||
glVertexAttribPointer(MeshShader::InstancedObjectPass2Shader::attrib_origin, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), 0);
|
||||
glVertexAttribDivisor(MeshShader::InstancedObjectPass2Shader::attrib_origin, 1);
|
||||
glVertexAttribPointer(MeshShader::InstancedObjectPass2Shader::attrib_orientation, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (GLvoid*)(3 * sizeof(float)));
|
||||
glVertexAttribDivisor(MeshShader::InstancedObjectPass2Shader::attrib_orientation, 1);
|
||||
break;
|
||||
case SM_GRASS:
|
||||
mesh.vao_second_pass = createVAO(mesh.vertex_buffer, mesh.index_buffer,
|
||||
|
Loading…
x
Reference in New Issue
Block a user