+ All Categories
Home > Documents > ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica...

ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica...

Date post: 30-Jun-2020
Category:
Upload: others
View: 4 times
Download: 0 times
Share this document with a friend
29
Computação Gráfica Computer Graphics Engenharia Informática (11569) – 3º ano, 2º semestre Chap. 4 – Windows and Viewports
Transcript
Page 1: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Computação GráficaComputer GraphicsEngenharia Informática (11569) – 3º ano, 2º semestre

Chap. 4 – Windows and Viewports

Page 2: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Outline

…:

– Basic definitions in 2D:§ Global coordinates (scene domain): continuous domain

§ Screen coordinates (image domain): discrete domain

– Window-viewport transformation

– Window-viewport transformation in OpenGL

– Geometric transformations in OpenGL/GLM

– Graphics pipeline (or rendering pipeline)

– Mapping a scene into various viewports

– Avoiding image distortion

– OpenGL examples

Page 3: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Definitions

scene window

viewport

image domain(screen) screen window

Image coordinate system (or image domain) - is associated with a screen window-screen space where the raster image is displayed(e.g., 500x500 pixels)- a screen window may comprise various viewports, which may overlap- the image domain is discrete (pixels)

Viewport (image sub-domain)- part of the screen window where the image is rendered

Global (or world) coordinate system (or scenedomain) - is associated with the scene domain (or applicationdomain)- is where geometric objects lie in- is where the geometry of each scene’s object is defined- the scene domain is continuous (e.g., ℝ")

Scene window (scene sub-domain)- rectangualr scene sub-domain whose contents we intend to display on screen

Page 4: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Window-viewport transformation

scene window

viewport

screen window

4

We need an automated process:

– To map a scene window (world coordinates) into a viewport (screen coordinates), the so-calledwindow-viewport transformation.

– Thus, in principle, the same scene can be mapped into different viewports, no matter they belong to the same screen window or not.

Page 5: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Window-viewport transformation

- This operation is performed in an automated manner by the graphics system.- It involves 3 geometric transformations: translation in global coordinates, scaling, and translation in screen

coordinates.

window in global or world coordinates(scene domain)

y

x

(xmax,ymax)

(xmin,ymin)

y

x

v

u

(umax,vmax)

(umin,vmin)

v

u

window translatedto the origin

viewport in image coordinates

viewport translatedto its pre-defined position

5

Page 6: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsWindow-viewport transformation:matrix representation

y

x

(xmax,ymax)

(xmin,ymin)

y

x

v

u

(umax,vmax)

(umin,vmin)

v

u

Page 7: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsWindow-viewport transformation:in more detail

y

x

(xmax,ymax)

(xmin,ymin)

(umax,vmax)

(umin,vmin)

v

u

Keeping the ratio in mapping (x,y) to (u,v)

xmin xmaxx umin umax

u

ymin

ymax

y

vmin

vmax

v

translation translationscaling

7

Page 8: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsWindow-viewport transformation:example

y

x

(xmax,ymax)

(xmin,ymin)

(umax,vmax)

(umin,vmin)

v

u

window(10.0,5.0,40.0,30.0) viewport(100,50,250,300)

Page 9: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsWindow-viewport transformation:GLM and OpenGL

glm::ortho(left, right, bottom, top)

– It sets up the 2D scene domain. It is defined by two vertical lines (left and right) and two horizontal lines (bottom and top)

– Default scene domain is (-1,1,-1,1).

– It defines the orthogonal projection matrix in 2D.

– Also, it defines the window-viewport transformation in an automated manner.

glViewport(x, y, width, height)

– It defines the viewport in the screen window, where (x,y) represent its bottom-left corner, while (width,height) its size.

– By default, the viewport spans the entire domain of screen window.

– There may exist various viewports inside the screen window, which may eventually overlap.

Page 10: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

OpenGL graphics pipeline

Vertex ModelviewMatrix

ProjectionMatrix Viewport

GL_MODELVIEW modeglm::translate()glm::rotate()glm::scale()glUniformMatrix*()glm::lookAt()

GL_PROJECTION modeglm::ortho()glm::frustum()glm::perspective()

glViewport()

eye coordinates clipping coordinates

viewport coordinates

Page 11: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Example in OpenGL

(using a scene domain and a default viewport)

n In this example, we do not use the default scene domain (-1,1,-1,1); that is, the scene domain is given by glm::ortho(xmin,xmax,ymin,ymax)

n The function glViewport(x, y, width, height) is not used explicitly, so the default viewport spans the entire extent of the screen window.

Page 12: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

// Include standard headers#include <stdio.h>#include <stdlib.h>

// Include GLEW#include <GL/glew.h>

// Include GLFW#include <GLFW/glfw3.h>GLFWwindow* window;

// GLM header file#include <glm/glm.hpp>using namespace glm;

// shaders header file#include <common/shader.hpp>

// Vertex array object (VAO)GLuint VertexArrayID;

// Vertex buffer object (VBO)GLuint vertexbuffer;

// color buffer object (CBO)GLuint colorbuffer;

// GLSL program from the shadersGLuint programID;

// function prototypesvoid transferDataToGPUMemory(void);void cleanupDataFromGPU();void draw();

Page 13: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

int main( void ){

// Initialise GLFWglfwInit();// Setting up OpenGL version and the likeglfwWindowHint(GLFW_SAMPLES, 4);glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be neededglfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);// Open a window window = glfwCreateWindow( 1024, 768, ”House in Red and Green", NULL, NULL);// Create window contextglfwMakeContextCurrent(window);// Initialize GLEWglewExperimental = true; // Needed for core profileglewInit();// Ensure we can capture the escape key being pressed belowglfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);// Dark blue backgroundglClearColor(0.0f, 0.0f, 0.4f, 0.0f);// transfer my data (vertices, colors, and shaders) to GPU sidetransferDataToGPUMemory();// render scene for each framedo{ // drawing callback

draw();// Swap buffersglfwSwapBuffers(window);// looking for input eventsglfwPollEvents();

} while (glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose(window) == 0 );// Cleanup VAO, VBOs, and shaders from GPUcleanupDataFromGPU();// Close OpenGL window and terminate GLFWglfwTerminate();return 0;

}

Page 14: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

void transferDataToGPUMemory(void){

// VAOglGenVertexArrays(1, &VertexArrayID);glBindVertexArray(VertexArrayID);

// Create and compile our GLSL program from the shadersprogramID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" );

// vertices for 2 trianglesstatic const GLfloat g_vertex_buffer_data[] = {

0.0f, 0.0f, 0.0f, 20.0f, 0.0f, 0.0f, 20.0f, 20.0f, 0.0f, // first triangle0.0f, 0.0f, 0.0f, 20.0f, 20.0f, 0.0f, 0.0f, 20.0f, 0.0f, // second triangle 0.0f, 20.0f, 0.0f, 20.0f, 20.0f, 0.0f, 10.0f, 30.0f, 0.0f, // third triangle

};

// One color for each vertexstatic const GLfloat g_color_buffer_data[] = {

1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // color for 3 vertices of the first triangle1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // color for 3 vertices of the second triangle0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, // color for 3 vertices of the third triangle

};

// Move vertex data to video memory; specifically to VBO called vertexbufferglGenBuffers(1, &vertexbuffer);glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);// Move color data to video memory; specifically to CBO called colorbufferglGenBuffers(1, &colorbuffer);glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);glBufferData(GL_ARRAY_BUFFER, sizeof(g_color_buffer_data), g_color_buffer_data, GL_STATIC_DRAW);

}

Page 15: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

void cleanupDataFromGPU(){

glDeleteBuffers(1, &vertexbuffer);glDeleteBuffers(1, &colorbuffer);glDeleteVertexArrays(1, &VertexArrayID);glDeleteProgram(programID);

}

Page 16: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

void draw (void){

// Clear the screenglClear( GL_COLOR_BUFFER_BIT );// Use our shaderglUseProgram(programID);

// window-viewport transformationglm::mat4 mvp = glm::ortho(-40.0f, 40.0f, -40.0f, 40.0f);// retrieve the matrix uniform locationsunsigned int matrix = glGetUniformLocation(programID, "mvp");glUniformMatrix4fv(matrix, 1, GL_FALSE, &mvp[0][0]);

// 1rst attribute buffer : verticesglEnableVertexAttribArray(0);glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

// 2nd attribute buffer : colorsglEnableVertexAttribArray(1);glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

// Draw the 3 triangles !glDrawArrays(GL_TRIANGLES, 0, 9); // 9 indices starting at 0

// Disable arrays of attributes for verticesglDisableVertexAttribArray(0);glDisableVertexAttribArray(1);

}

Page 17: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

vertexshader.vs

#version 330 core

// Input vertex data and color datalayout(location = 0) in vec3 vertexPosition;layout(location = 1) in vec3 vertexColor;

// window-viewport transformation matrixuniform mat4 mvp;

// Output fragment dataout vec3 fragmentColor;

void main(){

// project each vertex in homogeneous coordinatesgl_Position = mvp * vec4(vertexPosition, 1.0);

// the vertex shader just passes the color to fragment shaderfragmentColor = vertexColor;

}

Page 18: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

fragmentshader.fs

#version 330 core

// Interpolated values from the vertex shadersin vec3 fragmentColor;

// Ouput dataout vec3 color;

void main(){

color = fragmentColor;}

Page 19: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsP01, Exercise 3:Graphics application to draw a house (3 triangles)

Page 20: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Example in OpenGL

(using a scene domain and 4 viewports)

n In this example, we use a specific scene domain given by glm::ortho(xmin,xmax,ymin,ymax)n The function glViewport(x, y, width, height) is used explicitly to define each viewport inside the screen window.n This program takes advantage of the same shaders as the previous program.

Page 21: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

// Include standard headers#include <stdio.h>#include <stdlib.h>

// Include GLEW#include <GL/glew.h>

// Include GLFW#include <GLFW/glfw3.h>GLFWwindow* window;

// GLM header file#include <glm/glm.hpp>using namespace glm;

// shaders header file#include <common/shader.hpp>

// Vertex array object (VAO)GLuint VertexArrayID;

// Vertex buffer object (VBO)GLuint vertexbuffer;

// color buffer object (CBO)GLuint colorbuffer;

// GLSL program from the shadersGLuint programID;

// screen window GLint WindowWidth = 600;GLint WindowHeight = 600;

// function prototypesvoid transferDataToGPUMemory(void);void cleanupDataFromGPU();void draw();

Page 22: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

int main( void ){ // Initialise GLFW

glfwInit();

// Setting up OpenGL version and the likeglfwWindowHint(GLFW_SAMPLES, 4);glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be neededglfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

// Open a window window = glfwCreateWindow( 1024, 768, ”House in 4 Viewports", NULL, NULL);

// Create window contextglfwMakeContextCurrent(window);

// Initialize GLEWglewExperimental = true; // Needed for core profileglewInit();

// Ensure we can capture the escape key being pressed belowglfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

// White backgroundglClearColor(1.0f, 1.0f, 1.0f, 0.0f);

// Clear the screenglClear( GL_COLOR_BUFFER_BIT );

// transfer my data (vertices, colors, and shaders) to GPU sidetransferDataToGPUMemory();

// see next page for more …

Page 23: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

// Create a framebuffer for viewportsGLuint FramebufferName = 0;glGenFramebuffers(1, &FramebufferName);

// render scene for each framedo{ //left bottom

glBindFramebuffer(GL_FRAMEBUFFER, 0);glViewport(0, 0, WindowWidth*0.5, WindowHeight*0.5);draw();//right bottomglViewport(WindowWidth*0.5, 0, WindowWidth*0.5, WindowHeight*0.5);draw();//left topglViewport(0, WindowHeight*0.5, WindowWidth*0.5, WindowHeight*0.5);draw();//right topglViewport(WindowWidth*0.5, WindowHeight*0.5, WindowWidth*0.5, WindowHeight*0.5);draw();// Swap buffersglfwSwapBuffers(window);// looking for input eventsglfwPollEvents();

} while (glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose(window) == 0 );

// delete framebufferglDeleteFramebuffers(1,&FramebufferName);

// Cleanup VAO, VBOs, and shaders from GPUcleanupDataFromGPU();

// Close OpenGL window and terminate GLFWglfwTerminate();return 0;

}

Page 24: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

void transferDataToGPUMemory(void){

// VAOglGenVertexArrays(1, &VertexArrayID);glBindVertexArray(VertexArrayID);

// Create and compile our GLSL program from the shadersprogramID = LoadShaders( "SimpleVertexShader.vertexshader", "SimpleFragmentShader.fragmentshader" );

// vertices for 2 trianglesstatic const GLfloat g_vertex_buffer_data[] = {

0.0f, 0.0f, 0.0f, 20.0f, 0.0f, 0.0f, 20.0f, 20.0f, 0.0f, // first triangle0.0f, 0.0f, 0.0f, 20.0f, 20.0f, 0.0f, 0.0f, 20.0f, 0.0f, // second triangle 0.0f, 20.0f, 0.0f, 20.0f, 20.0f, 0.0f, 10.0f, 30.0f, 0.0f, // third triangle

};

// One color for each vertexstatic const GLfloat g_color_buffer_data[] = {

1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // color for 3 vertices of the first triangle1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // color for 3 vertices of the second triangle0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, // color for 3 vertices of the third triangle

};

// Move vertex data to video memory; specifically to VBO called vertexbufferglGenBuffers(1, &vertexbuffer);glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);// Move color data to video memory; specifically to CBO called colorbufferglGenBuffers(1, &colorbuffer);glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);glBufferData(GL_ARRAY_BUFFER, sizeof(g_color_buffer_data), g_color_buffer_data, GL_STATIC_DRAW);

}

Page 25: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

void cleanupDataFromGPU(){

glDeleteBuffers(1, &vertexbuffer);glDeleteBuffers(1, &colorbuffer);glDeleteVertexArrays(1, &VertexArrayID);glDeleteProgram(programID);

}

Page 26: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

void draw (void){

// Clear the screen : this has been moved to main(); otherwise only one house is displayed // glClear( GL_COLOR_BUFFER_BIT );

// Use our shaderglUseProgram(programID);

// window-viewport transformationglm::mat4 mvp = glm::ortho(-40.0f, 40.0f, -40.0f, 40.0f);// retrieve the matrix uniform locationsunsigned int matrix = glGetUniformLocation(programID, "mvp");glUniformMatrix4fv(matrix, 1, GL_FALSE, &mvp[0][0]);

// 1rst attribute buffer : verticesglEnableVertexAttribArray(0);glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

// 2nd attribute buffer : colorsglEnableVertexAttribArray(1);glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

// Draw the 3 triangles !glDrawArrays(GL_TRIANGLES, 0, 9); // 9 indices starting at 0

// Disable arrays of attributes for verticesglDisableVertexAttribArray(0);glDisableVertexAttribArray(1);

}

Page 27: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsGraphics applicationto draw the same house in 4 viewports

Page 28: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewportsAutomated setup of the viewportwithout image distortionn R = aspect ratio of the scene domain or window = width / heightn We consider two cases:

y

x

scene window

width

R>W/Hscreen window

viewport

W

HW/R

y

x

scene window

width

R<W/Hscreen window

viewport

W

HH.R

28

n To avoid image distortion, a rectangular region on the top of screen window will be discarded.

n Thus, the mapped image will own the resolution 𝑊×𝑊/𝑅.

n To avoid image distortion, a rectangular region on the right-hand side of screen window will be discarded.

n Thus, the mapped image will own the resolution 𝐻 ∗ 𝑅×𝐻.

heig

ht

heig

htglViewport(0,0,W,W/R); glViewport(0,0,H*R,H);

Page 29: ComputaçãoGráfica - UBIagomes/cg/teoricas/04-windows.pdf · ComputaçãoGráfica ComputerGraphics Engenharia Informática (11569) –3º ano, 2º semestre Chap. 4–Windows andViewports

Cap. 4: Windows andViewports

Summary:

…:

– Basic definitions in 2D:§ Global coordinates (scene domain): continuous domain

§ Screen coordinates (image domain): discrete domain

– Window-viewport transformation

– Window-viewport transformation in OpenGL

– Geometric transformations in OpenGL/GLM

– Graphics pipeline (or rendering pipeline)

– Mapping a scene into various viewports

– Avoiding image distortion

– OpenGL examples


Recommended