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