Added ground and improved lighting
This commit is contained in:
parent
c8ab95d27b
commit
7ba6ca9918
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,6 +1,8 @@
|
||||
main_6_1.cpp
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(96,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(97,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(349,12): warning C4244: "argument": konwersja z "time_t" do "unsigned int", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(132,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(133,23): warning C4244: "=": konwersja z "int" do "float", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(326,33): warning C4244: "argument": konwersja z "double" do "GLfloat", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(327,44): warning C4244: "argument": konwersja z "double" do "GLfloat", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 6\src\main_6_1.cpp(601,12): warning C4244: "argument": konwersja z "time_t" do "unsigned int", możliwa utrata danych
|
||||
Camera.obj : warning LNK4075: zignorowano opcję „/EDITANDCONTINUE” z powodu określenia opcji „/INCREMENTAL:NO”
|
||||
grk-cw6.vcxproj -> C:\Users\Michal\source\repos\GRK\Debug\grk-cw6.exe
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -12,6 +12,38 @@
|
||||
#include "Texture.h"
|
||||
#include "SOIL/stb_image_aug.h"
|
||||
|
||||
#define M_PI 3.14159265358979323846
|
||||
|
||||
enum {
|
||||
PASS_NORMAL, PASS_CAUSTIC
|
||||
};
|
||||
|
||||
|
||||
|
||||
static GLboolean HaveTexObj = GL_FALSE;
|
||||
static int reportSpeed = 0;
|
||||
static int dinoDisplayList;
|
||||
static GLfloat causticScale = 1.0;
|
||||
|
||||
static GLfloat lightPosition[4];
|
||||
/* XXX Diffuse light color component > 1.0 to brighten caustics. */
|
||||
|
||||
|
||||
static int directionalLight = 1;
|
||||
static int showCaustics = 1, causticMotion = 1;
|
||||
static int useMipmaps = 1;
|
||||
static int currentCaustic = 0;
|
||||
static int causticIncrement = 1;
|
||||
|
||||
static float lightAngle = 0.0, lightHeight = 20;
|
||||
static GLfloat angle = -150; /* in degrees */
|
||||
static GLfloat angle2 = 30; /* in degrees */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
GLuint programColor;
|
||||
GLuint programTexture;
|
||||
GLuint skyboxTexture;
|
||||
@ -20,6 +52,7 @@ Core::Shader_Loader shaderLoader;
|
||||
|
||||
Core::RenderContext shipContext;
|
||||
Core::RenderContext fishContext;
|
||||
Core::RenderContext planeContext;
|
||||
|
||||
glm::vec3 cameraPos = glm::vec3(0, 0, 0);
|
||||
glm::vec3 cameraDir; // Wektor "do przodu" kamery
|
||||
@ -40,6 +73,9 @@ glm::quat rotation = glm::quat(1, 0, 0, 0);
|
||||
|
||||
GLuint textureAsteroid;
|
||||
GLuint textureFish01;
|
||||
GLuint groundTexture;
|
||||
|
||||
obj::Model planeModel;
|
||||
|
||||
|
||||
int WIN_WIDTH = 1280;
|
||||
@ -166,6 +202,25 @@ void drawObjectTexture(Core::RenderContext context, glm::mat4 modelMatrix, GLuin
|
||||
|
||||
glUseProgram(0);
|
||||
}
|
||||
void drawPlaneTexture(Core::RenderContext context, glm::mat4 modelMatrix, GLuint textureId)
|
||||
{
|
||||
|
||||
modelMatrix = glm::translate(modelMatrix, glm::vec3(-20.f, 0.f, 0.f));
|
||||
GLuint program = programTexture;
|
||||
|
||||
glUseProgram(program);
|
||||
|
||||
glUniform3f(glGetUniformLocation(program, "lightDir"), lightDir.x, lightDir.y, lightDir.z);
|
||||
Core::SetActiveTexture(textureId, "textureSampler", program, 0);
|
||||
|
||||
glm::mat4 transformation = perspectiveMatrix * cameraMatrix * modelMatrix;
|
||||
glUniformMatrix4fv(glGetUniformLocation(program, "modelViewProjectionMatrix"), 1, GL_FALSE, (float*)&transformation);
|
||||
glUniformMatrix4fv(glGetUniformLocation(program, "modelMatrix"), 1, GL_FALSE, (float*)&modelMatrix);
|
||||
|
||||
Core::DrawContext(context);
|
||||
|
||||
glUseProgram(0);
|
||||
}
|
||||
|
||||
//Zmienna z teksturami skyboxa
|
||||
std::vector<std::string> faces = {
|
||||
@ -258,8 +313,203 @@ float skyboxVertices[] = {
|
||||
skyboxSize, -skyboxSize, skyboxSize
|
||||
};
|
||||
|
||||
void drawLightLocation()
|
||||
{
|
||||
glPushMatrix();
|
||||
glDisable(GL_LIGHTING);
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glColor3f(1.0, 1.0, 0.0);
|
||||
if (directionalLight) {
|
||||
/* Draw an arrowhead. */
|
||||
glDisable(GL_CULL_FACE);
|
||||
glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]);
|
||||
glRotatef(lightAngle * -180.0 / M_PI, 0, 1, 0);
|
||||
glRotatef(atan(lightHeight / 12) * 180.0 / M_PI, 0, 0, 1);
|
||||
glBegin(GL_TRIANGLE_FAN);
|
||||
glVertex3f(0, 0, 0);
|
||||
glVertex3f(2, 1, 1);
|
||||
glVertex3f(2, -1, 1);
|
||||
glVertex3f(2, -1, -1);
|
||||
glVertex3f(2, 1, -1);
|
||||
glVertex3f(2, 1, 1);
|
||||
glEnd();
|
||||
/* Draw a white line from light direction. */
|
||||
glColor3f(1.0, 1.0, 1.0);
|
||||
glBegin(GL_LINES);
|
||||
glVertex3f(0, 0, 0);
|
||||
glVertex3f(5, 0, 0);
|
||||
glEnd();
|
||||
glEnable(GL_CULL_FACE);
|
||||
}
|
||||
else {
|
||||
/* Draw a yellow ball at the light source. */
|
||||
glTranslatef(lightPosition[0], lightPosition[1], lightPosition[2]);
|
||||
glutSolidSphere(1.0, 5, 5);
|
||||
}
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glEnable(GL_LIGHTING);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
void drawScene()
|
||||
{
|
||||
glm::mat4 shipInitialTransformation = glm::translate(glm::vec3(0, 0, 0));
|
||||
// Scaling models
|
||||
glm::vec3 shipScale = glm::vec3(0.01, 0.01, 0.01);
|
||||
shipInitialTransformation = glm::scale(shipInitialTransformation, shipScale);
|
||||
|
||||
shipInitialTransformation = shipInitialTransformation * glm::translate(glm::vec3(0, 0, 0)) * glm::rotate(glm::radians(180.0f), glm::vec3(0, 1, 0)) * glm::scale(glm::vec3(0.5f));
|
||||
glm::mat4 shipModelMatrix = glm::translate(vehiclePos + vehicleDir) * glm::rotate(-vehicleAngle, glm::vec3(0, 1, 0)) * shipInitialTransformation;
|
||||
drawObjectColor(shipContext, shipModelMatrix, glm::vec3(0.6f));
|
||||
|
||||
|
||||
glm::mat4 modelMatrix = glm::translate(glm::vec3(0, 0, 0));
|
||||
// Scaling models
|
||||
glm::vec3 scale = glm::vec3(0.001, 0.001, 0.001);
|
||||
modelMatrix = glm::scale(modelMatrix, scale);
|
||||
|
||||
drawObjectTexture(fishContext, modelMatrix, textureFish01);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
|
||||
glm::mat4 modelMatrix = glm::translate(planetLocation[i]);
|
||||
// Scaling models
|
||||
glm::vec3 scale = glm::vec3(0.001, 0.001, 0.001);
|
||||
modelMatrix = glm::scale(modelMatrix, scale);
|
||||
|
||||
drawObjectTexture(fishContext, modelMatrix, textureFish01);
|
||||
}
|
||||
|
||||
drawPlaneTexture(planeContext, glm::rotate(glm::radians(90.f), glm::vec3(0.f, 0.f, 1.f)), groundTexture);
|
||||
|
||||
glUseProgram(skyboxTexture);
|
||||
glUniform1i(glGetUniformLocation(skyboxTexture, "skybox"), 0);
|
||||
glm::mat4 transformation = perspectiveMatrix * glm::mat4(glm::mat3(cameraMatrix));
|
||||
glUniformMatrix4fv(glGetUniformLocation(skyboxTexture, "projectionView"), 1, GL_FALSE, (float*)&transformation);
|
||||
//Przypisanie VAO i rysowanie skyboxa
|
||||
glBindVertexArray(skyboxVAO);
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture);
|
||||
glDrawArrays(GL_TRIANGLES, 0, 36);
|
||||
glBindVertexArray(0);
|
||||
|
||||
glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // We'll Clear To The Color Of The Fog ( Modified )
|
||||
float color[] = { 0.5f, 0.5f, 0.5f, 1.0f };
|
||||
glEnable(GL_FOG);
|
||||
glFogi(GL_FOG_MODE, GL_EXP2); // Fog Mode
|
||||
glFogfv(GL_FOG_COLOR, color); // Set Fog Color
|
||||
glFogf(GL_FOG_DENSITY, 0.35f); // How Dense Will The Fog Be
|
||||
glHint(GL_FOG_HINT, GL_DONT_CARE); // Fog Hint Value
|
||||
glFogf(GL_FOG_START, 1.0f); // Fog Start Depth
|
||||
glFogf(GL_FOG_END, 5.0f); // Fog End Depth
|
||||
glEnable(GL_FOG);
|
||||
|
||||
glDepthFunc(GL_LESS); // set depth function back to default
|
||||
glUseProgram(0);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
void drawSceneLight(int pass)
|
||||
{
|
||||
|
||||
|
||||
/* Set current color to "white" and disable lighting
|
||||
to emulate OpenGL 1.1's GL_REPLACE texture environment. */
|
||||
glColor3f(1.0, 1.0, 1.0);
|
||||
glDisable(GL_LIGHTING);
|
||||
|
||||
/* Generate the S & T coordinates for the caustic textures
|
||||
from the object coordinates. */
|
||||
|
||||
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
|
||||
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
|
||||
|
||||
glEnable(GL_TEXTURE_GEN_S);
|
||||
glEnable(GL_TEXTURE_GEN_T);
|
||||
|
||||
|
||||
drawScene();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void renderScene()
|
||||
{
|
||||
|
||||
cameraMatrix = createCameraMatrix();
|
||||
perspectiveMatrix = Core::createPerspectiveMatrix();
|
||||
|
||||
|
||||
int startTime, endTime;
|
||||
startTime = glutGet(GLUT_ELAPSED_TIME);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glClearColor(0.0f, 0.1f, 0.3f, 1.0f);
|
||||
|
||||
|
||||
|
||||
|
||||
lightPosition[0] = 12 * cos(lightAngle);
|
||||
lightPosition[1] = lightHeight;
|
||||
lightPosition[2] = 12 * sin(lightAngle);
|
||||
if (directionalLight) {
|
||||
lightPosition[3] = 0.0;
|
||||
}
|
||||
else {
|
||||
lightPosition[3] = 1.0;
|
||||
}
|
||||
|
||||
|
||||
/* Draw the light location. */
|
||||
|
||||
glPushMatrix();
|
||||
|
||||
|
||||
glRotatef(angle2, 1.0, 0.0, 0.0);
|
||||
glRotatef(angle, 0.0, 1.0, 0.0);
|
||||
|
||||
/* Position the light again, after viewing rotation. */
|
||||
glLightfv(GL_LIGHT0, GL_POSITION, lightPosition);
|
||||
drawLightLocation();
|
||||
|
||||
drawSceneLight(PASS_NORMAL);
|
||||
|
||||
if (showCaustics) {
|
||||
/* Disable depth buffer update and exactly match depth
|
||||
buffer values for slightly faster rendering. */
|
||||
glDepthMask(GL_FALSE);
|
||||
glDepthFunc(GL_EQUAL);
|
||||
|
||||
/* Multiply the source color (from the caustic luminance
|
||||
texture) with the previous color from the normal pass. The
|
||||
caustics are modulated into the scene. */
|
||||
glBlendFunc(GL_ZERO, GL_SRC_COLOR);
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
drawSceneLight(PASS_CAUSTIC);
|
||||
|
||||
/* Restore fragment operations to normal. */
|
||||
glDepthMask(GL_TRUE);
|
||||
glDepthFunc(GL_LESS);
|
||||
glDisable(GL_BLEND);
|
||||
}
|
||||
glPopMatrix();
|
||||
|
||||
glutSwapBuffers();
|
||||
|
||||
if (reportSpeed) {
|
||||
glFinish();
|
||||
endTime = glutGet(GLUT_ELAPSED_TIME);
|
||||
printf("Speed %.3g frames/sec (%d ms)\n", 1000.0 / (endTime - startTime), endTime - startTime);
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
}
|
||||
/**
|
||||
void renderScene()
|
||||
{
|
||||
// Aktualizacja macierzy widoku i rzutowania
|
||||
@ -297,6 +547,8 @@ void renderScene()
|
||||
drawObjectTexture(fishContext, modelMatrix, textureFish01);
|
||||
}
|
||||
|
||||
drawPlaneTexture(planeContext, glm::rotate(glm::radians(90.f), glm::vec3(0.f, 0.f, 1.f)), groundTexture);
|
||||
|
||||
glUseProgram(skyboxTexture);
|
||||
glUniform1i(glGetUniformLocation(skyboxTexture, "skybox"), 0);
|
||||
glm::mat4 transformation = perspectiveMatrix * glm::mat4(glm::mat3(cameraMatrix));
|
||||
@ -324,7 +576,7 @@ void renderScene()
|
||||
|
||||
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}**/
|
||||
|
||||
void loadModelToContext(std::string path, Core::RenderContext& context)
|
||||
{
|
||||
@ -367,6 +619,9 @@ void init()
|
||||
loadModelToContext("models/TropicalFish01.3ds", fishContext);
|
||||
textureAsteroid = Core::LoadTexture("textures/asteroid.png");
|
||||
textureFish01 = Core::LoadTexture("textures/TropicalFish01.jpg");
|
||||
|
||||
loadModelToContext("models/plane.obj", planeContext);
|
||||
groundTexture = Core::LoadTexture("textures/sand.jpg");
|
||||
}
|
||||
|
||||
void shutdown()
|
||||
@ -374,6 +629,8 @@ void shutdown()
|
||||
shaderLoader.DeleteProgram(programColor);
|
||||
shaderLoader.DeleteProgram(programTexture);
|
||||
shaderLoader.DeleteProgram(skyboxTexture);
|
||||
|
||||
planeContext.initFromOBJ(planeModel);
|
||||
}
|
||||
|
||||
void idle()
|
||||
|
BIN
cw 6/textures/floor.jpg
Normal file
BIN
cw 6/textures/floor.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 486 KiB |
BIN
cw 6/textures/sand.jpg
Normal file
BIN
cw 6/textures/sand.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 441 KiB |
@ -1,9 +1,9 @@
|
||||
main_8_1.cpp
|
||||
C:\Users\Michal\source\repos\GRK\cw 8\src\main_8_1.cpp(37,42): warning C4305: "argument": obcięcie z "double" do "float"
|
||||
C:\Users\Michal\source\repos\GRK\cw 8\src\main_8_1.cpp(416,15): warning C4244: "argument": konwersja z "time_t" do "unsigned int", możliwa utrata danych
|
||||
C:\Users\Michal\source\repos\GRK\cw 8\src\main_8_1.cpp(427,15): warning C4244: "argument": konwersja z "time_t" do "unsigned int", możliwa utrata danych
|
||||
Camera.obj : warning LNK4075: zignorowano opcję „/EDITANDCONTINUE” z powodu określenia opcji „/INCREMENTAL:NO”
|
||||
PhysXExtensions_static_32.lib(ExtCpuWorkerThread.obj) : warning LNK4099: nie znaleziono pliku PDB „PhysXExtensions_static_32.pdb” z elementem „PhysXExtensions_static_32.lib(ExtCpuWorkerThread.obj)” lub w pozycji „C:\Users\Michal\source\repos\GRK\Debug\PhysXExtensions_static_32.pdb”; obiekt zostanie skonsolidowany bez informacji debugowania
|
||||
PhysXExtensions_static_32.lib(ExtDefaultCpuDispatcher.obj) : warning LNK4099: nie znaleziono pliku PDB „” z elementem „PhysXExtensions_static_32.lib(ExtDefaultCpuDispatcher.obj)” lub w pozycji „”; obiekt zostanie skonsolidowany bez informacji debugowania
|
||||
PhysXExtensions_static_32.lib(ExtDefaultCpuDispatcher.obj) : warning LNK4099: nie znaleziono pliku PDB „PhysXExtensions_static_32.pdb” z elementem „PhysXExtensions_static_32.lib(ExtDefaultCpuDispatcher.obj)” lub w pozycji „C:\Users\Michal\source\repos\GRK\Debug\PhysXExtensions_static_32.pdb”; obiekt zostanie skonsolidowany bez informacji debugowania
|
||||
PhysXExtensions_static_32.lib(ExtDefaultErrorCallback.obj) : warning LNK4099: nie znaleziono pliku PDB „PhysXExtensions_static_32.pdb” z elementem „PhysXExtensions_static_32.lib(ExtDefaultErrorCallback.obj)” lub w pozycji „C:\Users\Michal\source\repos\GRK\Debug\PhysXExtensions_static_32.pdb”; obiekt zostanie skonsolidowany bez informacji debugowania
|
||||
PhysXExtensions_static_32.lib(ExtDefaultSimulationFilterShader.obj) : warning LNK4099: nie znaleziono pliku PDB „PhysXExtensions_static_32.pdb” z elementem „PhysXExtensions_static_32.lib(ExtDefaultSimulationFilterShader.obj)” lub w pozycji „C:\Users\Michal\source\repos\GRK\Debug\PhysXExtensions_static_32.pdb”; obiekt zostanie skonsolidowany bez informacji debugowania
|
||||
grk-cw8.vcxproj -> C:\Users\Michal\source\repos\GRK\Debug\grk-cw8.exe
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -379,9 +379,12 @@ void renderScene()
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glClearColor(0.0f, 0.1f, 0.3f, 1.0f);
|
||||
glDepthMask(GL_FALSE);
|
||||
glDepthFunc(GL_EQUAL);
|
||||
|
||||
|
||||
//drawObjectTexture(planeContext, glm::rotate(glm::radians(90.f), glm::vec3(0.f, 0.f, 1.f)), groundTexture);
|
||||
|
||||
drawObjectTexture(planeContext, glm::rotate(glm::radians(90.f), glm::vec3(0.f, 0.f, 1.f)), groundTexture);
|
||||
drawObjectTexture(boxContext, boxModelMatrix, boxTexture); // boxModelMatrix was updated in updateTransforms()
|
||||
|
||||
glUseProgram(skyboxTexture);
|
||||
@ -405,6 +408,14 @@ void renderScene()
|
||||
glFogf(GL_FOG_END, 5.0f); // Fog End Depth
|
||||
glEnable(GL_FOG);
|
||||
|
||||
|
||||
|
||||
|
||||
/* Restore fragment operations to normal. */
|
||||
glDepthMask(GL_TRUE);
|
||||
glDepthFunc(GL_LESS);
|
||||
glDisable(GL_BLEND);
|
||||
|
||||
glDepthFunc(GL_LESS); // set depth function back to default
|
||||
|
||||
glUseProgram(0);
|
||||
|
Loading…
Reference in New Issue
Block a user