* fixes, refactoring & color attribute for planets
This commit is contained in:
parent
6b8227b0c3
commit
1ee349e1fb
8 changed files with 111 additions and 67 deletions
11
game/renderer_polygon_3d/gameobjects.frag
Normal file
11
game/renderer_polygon_3d/gameobjects.frag
Normal file
|
@ -0,0 +1,11 @@
|
|||
R"raw_string(
|
||||
#version 120
|
||||
varying vec3 vertex;
|
||||
uniform vec3 color;
|
||||
void main()
|
||||
{
|
||||
//gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
|
||||
//gl_FragColor = vec4(0.5+0.5*vertex.xyz, 1.0);
|
||||
gl_FragColor = vec4(color, 1.0);
|
||||
}
|
||||
)raw_string"
|
12
game/renderer_polygon_3d/gameobjects.vert
Normal file
12
game/renderer_polygon_3d/gameobjects.vert
Normal file
|
@ -0,0 +1,12 @@
|
|||
R"raw_string(
|
||||
#version 120
|
||||
varying vec3 vertex;
|
||||
uniform mat4 model;
|
||||
void main()
|
||||
{
|
||||
//vec3 p = position + scale*gl_Vertex.xyz;
|
||||
vec3 p = (model*gl_Vertex).xyz;
|
||||
gl_Position = vec4(p, 1.0);
|
||||
vertex = p.xyz;
|
||||
}
|
||||
)raw_string"
|
|
@ -38,59 +38,31 @@ namespace endofthejedi {
|
|||
m_particles->upload();
|
||||
|
||||
std::string vss_simple =
|
||||
"#version 120\n"
|
||||
"varying vec3 vertex;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = gl_Vertex;\n"
|
||||
" vertex = gl_Position.xyz;\n"
|
||||
"}\n"
|
||||
#include "simple.vert"
|
||||
;
|
||||
|
||||
std::string fss_simple =
|
||||
"#version 120\n"
|
||||
"varying vec3 vertex;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_FragColor = vec4(0.5+0.5*vertex.xyz, 1.0);\n"
|
||||
"}\n"
|
||||
#include "simple.frag"
|
||||
;
|
||||
|
||||
std::string vss_game_objects =
|
||||
"#version 120\n"
|
||||
"varying vec3 vertex;\n"
|
||||
"uniform mat4 model;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
//" vec3 p = position + scale*gl_Vertex.xyz;\n"
|
||||
" vec3 p = (model*gl_Vertex).xyz;\n"
|
||||
" gl_Position = vec4(p, 1.0);\n"
|
||||
" vertex = p.xyz;\n"
|
||||
"}\n"
|
||||
#include "gameobjects.vert"
|
||||
;
|
||||
|
||||
std::string fss_game_objects =
|
||||
"#version 120\n"
|
||||
"varying vec3 vertex;\n"
|
||||
"uniform vec3 color;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
//" gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);\n"
|
||||
//" gl_FragColor = vec4(0.5+0.5*vertex.xyz, 1.0);\n"
|
||||
" gl_FragColor = vec4(color, 1.0);\n"
|
||||
"}\n"
|
||||
#include "gameobjects.frag"
|
||||
;
|
||||
|
||||
m_shader.init();
|
||||
|
||||
#if 0
|
||||
(void) vss_game_objects;
|
||||
(void) fss_game_objects;
|
||||
(void) vss_simple;
|
||||
(void) fss_simple;
|
||||
m_shader.load(vss_simple.c_str(), GL_VERTEX_SHADER);
|
||||
m_shader.load(fss_simple.c_str(), GL_FRAGMENT_SHADER);
|
||||
#else
|
||||
(void) vss_simple;
|
||||
(void) fss_simple;
|
||||
(void) vss_game_objects;
|
||||
(void) fss_game_objects;
|
||||
m_shader.load(vss_game_objects.c_str(), GL_VERTEX_SHADER);
|
||||
m_shader.load(fss_game_objects.c_str(), GL_FRAGMENT_SHADER);
|
||||
#endif
|
||||
|
@ -135,7 +107,7 @@ namespace endofthejedi {
|
|||
glm::mat4 model = computeModelMatrix(planet);
|
||||
glUniformMatrix4fv(m_shader.location("model"), 1, GL_FALSE, glm::value_ptr(model));
|
||||
|
||||
glm::vec3 c = glm::vec3(0.7, 0.2, 0.1);
|
||||
glm::vec3 c = planet->getColor();
|
||||
glUniform3f(m_shader.location("color"), c.x, c.y, c.z);
|
||||
|
||||
m_planetModel->render();
|
||||
|
|
8
game/renderer_polygon_3d/simple.frag
Normal file
8
game/renderer_polygon_3d/simple.frag
Normal file
|
@ -0,0 +1,8 @@
|
|||
R"raw_string(
|
||||
#version 120
|
||||
varying vec3 vertex;
|
||||
void main()
|
||||
{
|
||||
gl_FragColor = vec4(0.5+0.5*vertex.xyz, 1.0);
|
||||
}
|
||||
)raw_string"
|
9
game/renderer_polygon_3d/simple.vert
Normal file
9
game/renderer_polygon_3d/simple.vert
Normal file
|
@ -0,0 +1,9 @@
|
|||
R"raw_string(
|
||||
#version 120
|
||||
varying vec3 vertex;
|
||||
void main()
|
||||
{
|
||||
gl_Position = gl_Vertex;
|
||||
vertex = gl_Position.xyz;
|
||||
}
|
||||
)raw_string"
|
11
game/renderer_polygon_3d/sphere.frag
Normal file
11
game/renderer_polygon_3d/sphere.frag
Normal file
|
@ -0,0 +1,11 @@
|
|||
R"raw_string(
|
||||
#version 120
|
||||
varying vec3 vertex;
|
||||
uniform vec3 color;
|
||||
void main()
|
||||
{
|
||||
//gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
|
||||
//gl_FragColor = vec4(0.5+0.5*vertex.xyz, 1.0);
|
||||
gl_FragColor = vec4(color, 1.0);
|
||||
}
|
||||
)raw_string"
|
14
game/renderer_polygon_3d/sphere.vert
Normal file
14
game/renderer_polygon_3d/sphere.vert
Normal file
|
@ -0,0 +1,14 @@
|
|||
R"raw_string(
|
||||
#version 120
|
||||
varying vec3 vertex;
|
||||
uniform mat4 model;
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
//vec3 p = position + scale*gl_Vertex.xyz;
|
||||
vec3 p = (model*gl_Vertex).xyz;
|
||||
gl_Position = vec4(p, 1.0);
|
||||
vertex = p.xyz;
|
||||
}
|
||||
)raw_string"
|
|
@ -5,36 +5,43 @@
|
|||
#include <cstdlib>
|
||||
|
||||
namespace game {
|
||||
class Planet : public Object {
|
||||
class Planet : public Object {
|
||||
public:
|
||||
/**
|
||||
* Planets are build out of one material.
|
||||
* TODO: support mixture or multiple material per planet.
|
||||
*/
|
||||
enum class Material {
|
||||
Rock,
|
||||
Metal,
|
||||
Sand,
|
||||
Gas,
|
||||
Ice,
|
||||
Water,
|
||||
Sun
|
||||
};
|
||||
enum class Material { Rock, Metal, Sand, Gas, Ice, Water, Sun };
|
||||
|
||||
Planet(const glm::vec2 &pos, int id, float r) : Planet(pos, id, r, Material::Rock)
|
||||
{
|
||||
}
|
||||
Planet(const glm::vec2 &pos, int id, float r)
|
||||
: Planet(pos, id, r, Material::Rock) {}
|
||||
|
||||
Planet(const glm::vec2 &pos, int id, float r, Material mat)
|
||||
: Object(pos, r)
|
||||
, id(id)
|
||||
, material(mat)
|
||||
, seed(rand())
|
||||
{
|
||||
: Object(pos, r), id(id), material(mat), seed(rand()) {}
|
||||
|
||||
glm::vec3 getColor() const {
|
||||
switch (material) {
|
||||
case Material::Rock:
|
||||
return {x : 0.19, y : 0.19, z : 0.19};
|
||||
case Material::Metal:
|
||||
return {x : 0.19, y : 0.19, z : 0.19};
|
||||
case Material::Sand:
|
||||
return {x : 0.19, y : 0.19, z : 0.19};
|
||||
case Material::Gas:
|
||||
return {x : 0.19, y : 0.19, z : 0.19};
|
||||
case Material::Ice:
|
||||
return {x : 0.19, y : 0.19, z : 0.19};
|
||||
case Material::Water:
|
||||
return {x : 0.19, y : 0.40, z : 0.72};
|
||||
case Material::Sun:
|
||||
return {x : 0.64, y : 0.67, z : 0.19};
|
||||
}
|
||||
return {x : 0.1, y : 0.1, z : 0.1};
|
||||
}
|
||||
|
||||
int id;
|
||||
Material material; // for rendering and physics (can fly through sun and outer gas planets)
|
||||
Material material; // for rendering and physics (can fly through sun and
|
||||
// outer gas planets)
|
||||
int seed; // just for rendering variation
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue