Newer
Older
double scalling = 0.00001f;
void scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
{
if (scalling > 1E-9)
scalling += yoffset / abs(yoffset) * 1E-7;
else if (yoffset > 0)
scalling += 1E-6;
}
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
std::cout << key << std::endl;
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
void coord_axis(axis draw_axis, Shader& _Shader){
std::vector<GLfloat> m_axis; //{x, y, z, color_x, color, y, color_z}
switch (draw_axis)
{
case _OX: m_axis = { -1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0 }; break;
case _OY: m_axis = { 0.0, -1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0 }; break;
case _OZ: m_axis = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0 }; break;
}
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, m_axis.size() * sizeof(GLfloat), &m_axis.front(), GL_STREAM_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
glDrawArrays(GL_LINE_STRIP, 0, m_axis.size() / 6);
glBindVertexArray(0);
glDeleteBuffers(1, &VBO);
void draw_line(GLfloat p1_1, GLfloat p1_2, GLfloat p2_1, GLfloat p2_2, Shader _Shader) {
std::vector<GLfloat> line{ p1_1, p1_2, 0.0f, 0.5f, 0.5f, 0.5f, p2_1, p2_2, 0.0f, 0.5f, 0.5f, 0.5f };
_Shader.Use();
GLuint VBO, VAO;
glGenBuffers(1, &VBO);
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, line.size() * sizeof(GLfloat), &line.front(), GL_STREAM_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glEnableVertexAttribArray(1);
glDrawArrays(GL_LINE_STRIP, 0, line.size() / 6);
glBindVertexArray(0);
glDeleteBuffers(1, &VBO);
glDeleteVertexArrays(1, &VAO);
}
void draw_plot_OXY(Shader& _Shader)
coord_axis(_OX, _Shader);
coord_axis(_OY, _Shader);
for (short i = -10; i < 11; i += 2) {
draw_line(-1.0f, i * 0.1f, 1.0f, i * 0.1f, _Shader);
draw_line(i * 0.1f, -1.0f, i * 0.1f, 1.0f, _Shader);
}
void modulation(Satellite& sat, double step_time, double end, std::vector<GLfloat>& DCS, std::vector<GLfloat>& DVS) {
if (step_time <= end) {
//
buff = { float(sat.getDCS().at(0, 0)), float(sat.getDCS().at(1, 0)), 0.0f, 0.5f, 0.0f, 0.5f };
//
DCS.insert(DCS.end(), buff.begin(), buff.end());
//// ,
//buff = { float(sat.getDVS().at(0, 0)), float(sat.getDVS().at(1, 0)), float(sat.getDVS().at(2, 0)), 0.0f, 0.0f, 1.0f };
////
//DVS.insert(DVS.end(), buff.begin(), buff.end());
//std::cout << "angle = " << cos(omega) << " sin = " << sin(omega) << std::endl;
void draw_modulation(std::vector<GLfloat>& DCS, std::vector<GLfloat>& DVS, Shader& _Shader) {
_Shader.Use();
glm::mat4 scale{1.0f};
scale = glm::scale(scale, glm::vec3(scalling, scalling, scalling));
GLuint scaleLoc = glGetUniformLocation(_Shader.Id, "scale");
glGenBuffers(1, &VBO);
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, DCS.size() * sizeof(GLfloat), &DCS.front(), GL_STREAM_DRAW);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)0);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(GLfloat), (GLvoid*)(3 * sizeof(GLfloat)));
glUniformMatrix4fv(scaleLoc, 1, GL_FALSE, glm::value_ptr(scale));
glDrawArrays(GL_LINE_STRIP, 0, DCS.size() / 6);
glBindVertexArray(0);
glDeleteBuffers(1, &VBO);