Path: blob/main_old/samples/gles1/SimpleLighting.cpp
2578 views
//1// Copyright 2018 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//56// Based on Hello_Triangle.c from7// Book: OpenGL(R) ES 2.0 Programming Guide8// Authors: Aaftab Munshi, Dan Ginsburg, Dave Shreiner9// ISBN-10: 032150279510// ISBN-13: 978032150279711// Publisher: Addison-Wesley Professional12// URLs: http://safari.informit.com/978032156383513// http://www.opengles-book.com1415#include "SampleApplication.h"1617#include <algorithm>1819#include "util/gles_loader_autogen.h"2021class SimpleLightingSample : public SampleApplication22{23public:24SimpleLightingSample(int argc, char **argv)25: SampleApplication("SimpleLightingSample", argc, argv, 1, 0)26{}2728bool initialize() override29{30glClearColor(0.4f, 0.3f, 0.2f, 1.0f);31mRotDeg = 0.0f;3233return true;34}3536void destroy() override {}3738void draw() override39{4041glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);42glColor4f(0.2f, 0.6f, 0.8f, 1.0f);4344GLfloat mat_ambient[] = {0.7f, 0.4f, 0.2f, 1.0f};45GLfloat mat_specular[] = {0.5f, 0.5f, 0.5f, 1.0f};46GLfloat mat_diffuse[] = {0.3f, 0.4f, 0.6f, 1.0f};47GLfloat lightpos[] = {0.0f, 1.0f, 0.0f, 0.0f};4849GLfloat normals[] = {50-0.4f, 0.4f, -0.4f, -0.4f, -0.4f, -0.4f, 0.2f, 0.0f, -0.4f,5152-0.4f, 0.4f, 0.4f, -0.4f, -0.4f, 0.4f, 0.2f, 0.0f, 0.4f,53};5455GLfloat vertices[] = {56-0.5f, 0.5f, 0.0f, -0.5f, -0.5f, 0.0f, 0.5f, 0.0f, 0.0f,5758-0.5f, 0.5f, 0.3f, -0.5f, -0.5f, 0.3f, 0.5f, 0.0f, 0.3f,59};6061GLuint indices[] = {620, 1, 2, 3, 4, 5,63640, 4, 3, 4, 0, 1,65664, 1, 2, 2, 5, 4,67685, 2, 3, 3, 2, 0,69};7071glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);72glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);73glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);7475glEnable(GL_DEPTH_TEST);76glEnable(GL_LIGHTING);77glEnable(GL_LIGHT0);78glLightfv(GL_LIGHT0, GL_POSITION, lightpos);7980glEnableClientState(GL_VERTEX_ARRAY);81glEnableClientState(GL_NORMAL_ARRAY);82glVertexPointer(3, GL_FLOAT, 0, vertices);83glNormalPointer(GL_FLOAT, 0, normals);8485for (int i = 0; i < 3; i++)86{87for (int j = 0; j < 3; j++)88{89glPushMatrix();9091glTranslatef(-0.6f + i * 0.6f, -0.6f + j * 0.6f, 0.0f);9293glRotatef(mRotDeg + (10.0f * (3.0f * i + j)), 0.0f, 1.0f, 0.0f);94glRotatef(20.0f + (20.0f * (3.0f * i + j)), 1.0f, 0.0f, 0.0f);95GLfloat scale = 0.5;96glScalef(scale, scale, scale);97glDrawElements(GL_TRIANGLES, 3 * 8, GL_UNSIGNED_INT, indices);9899glPopMatrix();100}101}102103mRotDeg += 0.03f;104}105106private:107float mRotDeg;108};109110int main(int argc, char **argv)111{112SimpleLightingSample app(argc, argv);113return app.run();114}115116117