Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SER431 Lecture 04
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Javier Gonzalez-Sanchez
PRO
August 27, 2018
Programming
400
0
Share
SER431 Lecture 04
Advanced Graphics
Skyboxes
(201808)
Javier Gonzalez-Sanchez
PRO
August 27, 2018
More Decks by Javier Gonzalez-Sanchez
See All by Javier Gonzalez-Sanchez
CSC307_L17_mqtt.pdf
javiergs
PRO
0
26
UP Lecture 28
javiergs
PRO
0
12
CSC307_L99_TDD.pdf
javiergs
PRO
0
28
CSC307_L99_TDD.pdf
javiergs
PRO
0
40
UP Lecture 27
javiergs
PRO
0
19
UP Lecture 26
javiergs
PRO
0
21
CSC305 Lecture 21
javiergs
PRO
0
37
CSC364 Lecture 18
javiergs
PRO
0
59
CSC364 Lecture 17
javiergs
PRO
0
170
Other Decks in Programming
See All in Programming
WebAssembly を読み込むベストプラクティス 2026年春版 / Best Practices for Loading WebAssembly (Spring 2026)
petamoriken
5
1.1k
開発体験を左右するライブラリの API 設計 - GraphQL スキーマ構築ライブラリから考える #tskaigi
izumin5210
1
170
空間オーディオの活用
objectiveaudio
0
150
Lightning-Fast Method Calls with Ruby 4.1 ZJIT / RubyKaigi 2026
k0kubun
3
3.2k
〜バイブコーディングを超えて〜 チームで実験し続けたAI駆動開発
tigertora7571
0
210
プラグインで拡張される Context をtype-safe にする難しさと設計判断
kazupon
1
180
新規プロダクトを高速で生み出すハーネスエンジニアリング
seanchas116
3
170
サプライチェーン攻撃対策「層を重ねて落ちない壁」を10日間で組み上げた話 #TechLeadConf2026
kashewnuts
1
290
ローカルLLMでどこまでコードが書けるか / How much code can be written on a local LLM
kishida
2
370
Agentic UI in the Frontend: Architectures with Open Standards @JAX 2026 in Mainz
manfredsteyer
PRO
0
120
Are We Really Coding 10× Faster with AI?
kohzas
0
190
KMP × Kotlin 2.3 - How Android Got Slower While iOS Builds Improved by 47%
rio432
0
200
Featured
See All Featured
Six Lessons from altMBA
skipperchong
29
4.2k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
A better future with KSS
kneath
240
18k
The Invisible Side of Design
smashingmag
302
52k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
170
Ethics towards AI in product and experience design
skipperchong
2
270
Scaling GitHub
holman
464
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Unsuck your backbone
ammeep
672
58k
Accessibility Awareness
sabderemane
1
120
Transcript
jgs SER 431 Advanced Graphics Lecture 04: Skyboxes Javier Gonzalez-Sanchez
[email protected]
PERALTA 230U Office Hours: By appointment
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 1 jgs
Previously
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 2 jgs
A box
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 3 jgs
A box // create a triangulated cube Mesh* createCube() { Mesh *mesh = new Mesh; // Define 8 Vertexes mesh->dot_vertex.push_back(Vec3<GLfloat>( 0.0, 32.0, 32.0)); mesh->dot_vertex.push_back(Vec3<GLfloat>( 32.0, 32.0, 32.0)); mesh->dot_vertex.push_back(Vec3<GLfloat>( 32.0, 0.0, 32.0)); mesh->dot_vertex.push_back(Vec3<GLfloat>( 0.0, 0.0, 32.0)); // .. // Define 6 Faces; 2 triangles each mesh->face_index_vertex.push_back(0); mesh->face_index_vertex.push_back(3); mesh->face_index_vertex.push_back(1); mesh->face_index_vertex.push_back(1); mesh->face_index_vertex.push_back(3); mesh->face_index_vertex.push_back(2); // continue in the next slide 3 2 1 0
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 4 jgs
// Define 8 Vertexes and Define 6 Faces; 2 triangles each // Define texture vertex mesh->dot_texture.push_back(Vec2<GLfloat>(0.0, 1.0)); mesh->dot_texture.push_back(Vec2<GLfloat>(1.0, 1.0)); mesh->dot_texture.push_back(Vec2<GLfloat>(1.0, 0.0)); mesh->dot_texture.push_back(Vec2<GLfloat>(0.0, 0.0)); // Define texture faces for (int t = 0; t<6; t++) { mesh->face_index_texture.push_back(0);//0 mesh->face_index_texture.push_back(2);//1 mesh->face_index_texture.push_back(1);//2 mesh->face_index_texture.push_back(0);//0 mesh->face_index_texture.push_back(3);//2 mesh->face_index_texture.push_back(2);//3 } return mesh; } A Texture Outside the Box
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 5 jgs
What about inside the box?
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 6 jgs
Load Textures // Create texture from a DIB or BMP file void texture_from_file(GLuint *textureArray, const char * file) { BITMAPINFO *bitmapInfo; // Bitmap information GLubyte *bitmapBits; // Bitmap data if (!file) { cout << "texture file not found!" << endl; return;} // load image bitmapBits = load_bmp_file(file, &bitmapInfo); // setup texture glGenTextures(1, textureArray); glBindTexture(GL_TEXTURE_2D, *textureArray); glPixelStorei(GL_UNPACK_ALIGNMENT, 1);// must set to 1 for compact data gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bitmapInfo->bmiHeader.biWidth, bitmapInfo->bmiHeader.biHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, bitmapBits ); }
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 7 jgs
A Texture for the Horizon
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 8 jgs
A texture for a Room https://www.facebook.com/asuphotos/photos/a.1636426986668999/1691991784445852/?type=3&theater
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 9 jgs
Texture Sources § Azimuth Chrome Plugin https://chrome.google.com/webstore/detail/azimuth-download-facebook/ https://www.360toolkit.co § Skyboxes Textures http://www.custommapmakers.org/skyboxes.php
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 10 jgs
Add a Texture to a Box void init() { // CREATE MESH DATA STRUCTURES mesh_cube = createCube(); // TEXTURES (Lecture 23 in SER 332) GLuint texture_array[6]; texture_from_file(&texture_array[0], "../../bmp files/top.bmp"); texture_from_file(&texture_array[1], "../../bmp files/left.bmp"); // ... // DISPLAY LIST skybox= meshToDisplayList(1, mesh_cube, texture_array); // CONFIGURE LIGHT }
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 11 jgs
GLuint meshToDisplayList(int id, Mesh* m, GLuint texture) { GLuint listID = glGenLists(id); glNewList(listID, GL_COMPILE); glEnable(GL_TEXTURE_2D); // Other options: GL_TEXTURE_1D, GL_TEXTURE_3D, GL_TEXTURE_CUBE_MAP glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); glBindTexture(GL_TEXTURE_2D, texture); glBegin(GL_TRIANGLES); // PER VERTEX NORMALS // TEXTURES if (!m->dot_texture.empty() && !m->face_index_texture.empty()) { glTexCoord2fv(&m->dot_texture[m->face_index_texture[i]].x); } // COLOR // VERTEX glEnd(); glDisable(GL_TEXTURE_2D); glEndList(); return listID; } Add a Texture to a Box
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 12 jgs
Texture inside a Box
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 13 jgs
Texture inside a Box https://www.facebook.com/asuphotos/photos/a.1636426986668999/1691991784445852/?type=3&theater
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 14 jgs
Quiz 1 § Work with your team § Create a Skybox § Submit your source code on Blackboard. Due: August 29, 11:59 PM
Javier Gonzalez-Sanchez | SER431 | Fall 2018 | 15 jgs
Test Yourselves Combine a sky box and a terrain. Allow the camera to be moved.
jgs SER431 Advanced Graphics Javier Gonzalez-Sanchez
[email protected]
Fall 2018 Disclaimer.
These slides can only be used as study material for the class SER431 at ASU. They cannot be distributed or used for another purpose.