SWBF2-Classic-Msh-Viewer/3DViewer/main.cpp

116 lines
2.8 KiB
C++

#define _CRT_SECURE_NO_WARNINGS
#ifndef _DEBUG
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#endif // DEBUG
#include <GL/glew.h>
#include <glm/gtc/matrix_transform.hpp>
#include "setup.h"
#include "callback.h"
int main(int argc, char** argv)
{
oglVariables scene;
// init everything
setupGLFW();
scene.window = createWindow();
setupGLEW();
initVariables(scene);
glBindVertexArray(scene.vertexArrayID);
// Set callback functions
glfwSetMouseButtonCallback(scene.window, mouseButton);
glfwSetCursorPosCallback(scene.window, mouseMove);
glfwSetWindowSizeCallback(scene.window, windowResize);
glfwSetScrollCallback(scene.window, mouseWheel);
glfwSetKeyCallback(scene.window, keyPress);
// set background color 0,5 0,8 1,0
glClearColor(0.0000f, 0.0000f, 0.4000f, 0.0000f);
// enable z-order
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_CULL_FACE);
// load object to OGL
glBindBuffer(GL_ARRAY_BUFFER, scene.vertexBufferID);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(scene.object.data) * scene.object.data.size(),
scene.object.data.data(),
GL_STATIC_DRAW
);
/*/ load color to OGL
glBindBuffer(GL_ARRAY_BUFFER, scene.colorBufferID);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(scene.object.color) * scene.object.color.size(),
scene.object.color.data(),
GL_STATIC_DRAW
);*/
// load UV to OGL
glBindBuffer(GL_ARRAY_BUFFER, scene.uvBufferID);
glBufferData(
GL_ARRAY_BUFFER,
sizeof(scene.object.uv) * scene.object.uv.size(),
scene.object.uv.data(),
GL_STATIC_DRAW
);
// Main loop
do {
//processInteraction(scene.window);
calcMatrices(scene);
// clear the scene
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// use shader prgram
glUseProgram(scene.shaderPrgmID);
// tell shader transformation
glUniformMatrix4fv(scene.matrix.id, 1, GL_FALSE, &scene.matrix.mvp[0][0]);
// bind texture in texture unit 0
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, scene.object.textureID);
// tell sampler to use texture unit 0
glUniform1i(scene.samplerID, 0);
// open attribute position
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, scene.vertexBufferID);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
/*/ open attribute color
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, scene.colorBufferID);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, 0);*/
// open attribute uv
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, scene.uvBufferID);
glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0);
// draw object
glDrawArrays(GL_TRIANGLES, 0, 3*12);
// close attributes
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glfwSwapBuffers(scene.window);
glfwPollEvents();
}
while (!glfwWindowShouldClose(scene.window));
cleanUp(scene);
return 0;
}