南邮 | 计算机图形学第二次小作业:滚轮缩放 + 增加纵向光源

计算机图形学第二次小作业:

  • camera.h 中增加滚轮缩放功能。

  • 再生成一个纵向的光源。

  • 构建自己的数据结构,实现回放功能。(选做)

一、思路

这次小作业,老师直接给了引入模型的代码。因此,我们要在老师代码的基础上进行程序修改,实现上述功能。

二、代码

  • main.cpp
//
//  main.cpp
//  Course 4
//
//  Created by rui huang on 10/27/17.
//  Copyright © 2017 rui huang. All rights reserved.
//


#include <iostream>

#define GLM_ENABLE_EXPERIMENTAL
#define GLEW_STATIC
#include <GL/glew.h>

#include <GLFW/glfw3.h>

#include "Shader.h"

#include "SOIL2/SOIL2.h"
#include "SOIL2/stb_image.h"
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtx/rotate_vector.hpp>

#include <glm/gtc/type_ptr.hpp>

#include "Camera.h"
#include "Model.h"
#include "Mesh.h"
#include "Light.h"
const GLint WIDTH = 800, HEIGHT = 800;
void KeyCallback( GLFWwindow *window, int key, int scancode, int action, int mode);
void ScrollCallback( GLFWwindow *window, double xOffset, double yOffset);
void MouseCallback( GLFWwindow *window, double xPos, double yPos);
void DoMovement();

Camera camera(glm::vec3(0.0f, 0.0f, 2.0f));
GLfloat lastX = WIDTH /2.0;
GLfloat lastY = HEIGHT /2.0;
bool keys[1024];

GLfloat deltaTime = 0.0f;
GLfloat lastTime = 0.0f;
bool firstMouse = true;


int main()
{
   
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
    
    GLFWwindow *window = glfwCreateWindow(WIDTH, HEIGHT, "OpenGL B16112011", nullptr, nullptr);
    
    int screenWidth, screenHeight;
    glfwGetFramebufferSize(window, &screenWidth, &screenHeight);
    
    if (nullptr == window) {
   
        std::cout << "Failed to create GLFW window" << std::endl;
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);
    
    // Set the required callback function
    glfwSetKeyCallback(window, KeyCallback);
    glfwSetCursorPosCallback(window, MouseCallback);
    glfwSetScrollCallback(window, ScrollCallback);
    glfwSetInputMode(window, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
    glewExperimental = GL_TRUE;
    
    if (GLEW_OK != glewInit()) {
   
        std::cout << "Failed to initialise GLEW" << std::endl;
        return -1;
    }
    glViewport(0, 0, screenWidth, screenHeight);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS);
    Shader shader("shaders/modelLoad.vs", "shaders/modelLoad.frag");
    Shader lightShader("shaders/core.vs", "shaders/core.frag");
    // Load models
    Model ourModel((GLchar *)"models/nanosuit.obj");
    Light lightModel = Light();
    
    glm::vec3 LightPos1 = glm::vec3(0.0f, 3.5f, 2.5f);
	glm::vec3 LightPos2 = glm::vec3(0.0f, 3.0f, 0.0f);
	glm::vec3 LightPos3 = glm::vec3(1.3f, 0.0f, 0.0f);

    while (!glfwWindowShouldClose(window)) {
   
        
        // Get the delta time between frames
        GLfloat currentFrame = glfwGetTime();
        deltaTime = currentFrame - lastTime;
        lastTime = currentFrame;
        LightPos1 = glm::rotate(LightPos1, 0.01f, glm::vec3(0.0f, 1.0f, 0.0f));
		LightPos2 = glm::rotate(LightPos2, 0.01f, glm::vec3(1.0f, 0.0f, 0.0f));

        glfwPollEvents();
        //DoMovement();

		// 变为控制光源移动
		if (keys[GLFW_KEY_UP]) {
   
			glm::vec4 vec(LightPos3.x, LightPos3.y, LightPos3.z, 1.0f);
			glm::mat4 trans <
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wonz

创作不易,一块就行。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值