精华内容
下载资源
问答
  • 好,本节我们来看一下glViewport API的作用。实现的实例如下图: 很简单,我们就是不断的变化视口,然后每个视口画一个三角形。本节的源码是在OpenGL\learn\src\main\java\com\opengl\learn\GlViewportRender.java...

         去年有分析了一些Opengl ES的实例,但是后面在实际的工作中,发现根基不牢,工作中使用的一些复杂场景还是理解的不够透彻,所以回过心来,必须把基础把扎实。从这节开始,我们后面对一些非常基础普通的Opengl ES API进行实际使用介绍,万丈高楼平地起,必须把基础搞扎实,我们才能一步步向上。

         所有实例均有提供源码,下载地址:Opengl ES Source Code

         网上找到一份非常好的资料,收集了很多API的英文翻译,供大家参考:OpenGL ES 2.0 中文API

         好,本节我们来看一下glViewport API的作用。实现的实例如下图:

         很简单,我们就是不断的变化视口,然后每个视口画一个三角形。本节的源码是在OpenGL\learn\src\main\java\com\opengl\learn\GlViewportRender.java文件中,该类所有源码如下:

    package com.opengl.learn;
    
    import android.content.Context;
    import android.opengl.GLSurfaceView;
    import android.util.Log;
    
    import com.lime.common.ESShader;
    
    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;
    import java.nio.FloatBuffer;
    
    import javax.microedition.khronos.egl.EGLConfig;
    import javax.microedition.khronos.opengles.GL10;
    
    import static android.opengl.GLES20.GL_COLOR_BUFFER_BIT;
    import static android.opengl.GLES20.GL_COMPILE_STATUS;
    import static android.opengl.GLES20.GL_FLOAT;
    import static android.opengl.GLES20.GL_FRAGMENT_SHADER;
    import static android.opengl.GLES20.GL_LINK_STATUS;
    import static android.opengl.GLES20.GL_TRIANGLES;
    import static android.opengl.GLES20.GL_VERTEX_SHADER;
    import static android.opengl.GLES20.glAttachShader;
    import static android.opengl.GLES20.glClear;
    import static android.opengl.GLES20.glClearColor;
    import static android.opengl.GLES20.glCompileShader;
    import static android.opengl.GLES20.glCreateProgram;
    import static android.opengl.GLES20.glCreateShader;
    import static android.opengl.GLES20.glDeleteProgram;
    import static android.opengl.GLES20.glDeleteShader;
    import static android.opengl.GLES20.glDrawArrays;
    import static android.opengl.GLES20.glEnableVertexAttribArray;
    import static android.opengl.GLES20.glGetAttribLocation;
    import static android.opengl.GLES20.glGetError;
    import static android.opengl.GLES20.glGetProgramInfoLog;
    import static android.opengl.GLES20.glGetProgramiv;
    import static android.opengl.GLES20.glGetShaderInfoLog;
    import static android.opengl.GLES20.glGetShaderiv;
    import static android.opengl.GLES20.glLinkProgram;
    import static android.opengl.GLES20.glShaderSource;
    import static android.opengl.GLES20.glUseProgram;
    import static android.opengl.GLES20.glVertexAttribPointer;
    import static android.opengl.GLES20.glViewport;
    
    public class GlViewportRender implements GLSurfaceView.Renderer {
        private static String TAG = GlViewportRender.class.getSimpleName();
        private final float[] mVerticesData =
                {0.0f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f,
                        -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f,
                        0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 1.0f};
    
        private final float[] mColorData =
                {
                        1.0f, 0.0f, 0.0f, 1.0f,   // c0
                        0.0f, 1.0f, 0.0f, 1.0f,   // c1
                        0.0f, 0.0f, 1.0f, 1.0f    // c2
                };
    
        private static final int BYTES_PER_FLOAT = 4;
        private static final int POSITION_COMPONENT_SIZE = 3;
        private static final int COLOR_COMPONENT_SIZE = 4;
    
        private Context mContext;
        private int mProgramObject;
        private int mWidth;
        private int mHeight;
        private FloatBuffer mVertices, mColorVertices;
        private int vPosition, vColor;
    
        private static final int STRIDE =
                (POSITION_COMPONENT_SIZE + COLOR_COMPONENT_SIZE) * BYTES_PER_FLOAT;
    
        public GlViewportRender(Context context) {
            mContext = context;
            mVertices = ByteBuffer.allocateDirect(mVerticesData.length * 4)
                    .order(ByteOrder.nativeOrder()).asFloatBuffer();
            mVertices.put(mVerticesData).position(0);
            mColorVertices = ByteBuffer.allocateDirect(mColorData.length * 4)
                    .order(ByteOrder.nativeOrder()).asFloatBuffer();
            mColorVertices.put(mColorData).position(0);
        }
    
        @Override
        public void onSurfaceCreated(GL10 gl, EGLConfig config) {
            loadProgram();
        }
    
        @Override
        public void onSurfaceChanged(GL10 gl, int width, int height) {
            mWidth = width;
            mHeight = height;
        }
    
        @Override
        public void onDrawFrame(GL10 gl) {
            drawShape();
        }
    
        private void drawShape() {
            // Clear the color buffer
            glClear(GL_COLOR_BUFFER_BIT);
            for (int i = 0; i < 4; i++) {
                if (i == 0) {
                    glViewport(0, mHeight / 2, mWidth / 2, mHeight / 2);
                } else if (i == 1) {
                    glViewport(mWidth / 2, mHeight / 2, mWidth / 2, mHeight / 2);
                } else if (i == 2) {
                    glViewport(0, 0, mWidth / 2, mHeight / 2);
                } else if (i == 3) {
                    glViewport(mWidth / 2, 0, mWidth / 2, mHeight / 2);
                }
    
                // Use the program object
                glUseProgram(mProgramObject);
    
                mVertices.position(0);
                // Load the vertex data
                glVertexAttribPointer(vPosition, 3, GL_FLOAT, false, STRIDE, mVertices);
                glEnableVertexAttribArray(vPosition);
    
                mVertices.position(POSITION_COMPONENT_SIZE);
                glVertexAttribPointer(vColor, 4, GL_FLOAT, false, STRIDE, mVertices);
                glEnableVertexAttribArray(vColor);
    
                glDrawArrays(GL_TRIANGLES, 0, 3);
            }
        }
    
        private void loadProgram() {
            String vShaderStr = ESShader.readShader(mContext, "viewport_vertexShader.glsl");
            String fShaderStr = ESShader.readShader(mContext, "viewport_fragmentShader.glsl");
            int vertexShader;
            int fragmentShader;
            int programObject;
            int[] linked = new int[1];
    
            // Load the vertex/fragment shaders
            vertexShader = loadShader(GL_VERTEX_SHADER, vShaderStr);
            fragmentShader = loadShader(GL_FRAGMENT_SHADER, fShaderStr);
    
            // Create the program object
            programObject = glCreateProgram();
    
            if (programObject == 0) {
                return;
            }
    
            glAttachShader(programObject, vertexShader);
            glAttachShader(programObject, fragmentShader);
    
            // Link the program
            glLinkProgram(programObject);
    
            // Check the link status
            glGetProgramiv(programObject, GL_LINK_STATUS, linked, 0);
    
            if (linked[0] == 0) {
                Log.e(TAG, "Error linking program:");
                Log.e(TAG, glGetProgramInfoLog(programObject));
                glDeleteProgram(programObject);
                return;
            }
            // Store the program object
            mProgramObject = programObject;
            glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
            vPosition = glGetAttribLocation(mProgramObject, "vPosition");
            vColor = glGetAttribLocation(mProgramObject, "vColor");
    
            Log.i(TAG, "vPosition: " + vPosition + ", vColor: " + vColor);
        }
    
        private int loadShader(int type, String shaderSrc) {
            int shader;
            int[] compiled = new int[1];
    
            // Create the shader object
            shader = glCreateShader(type);
    
            if (shader == 0) {
                return 0;
            }
    
            // Load the shader source
            glShaderSource(shader, shaderSrc);
    
            // Compile the shader
            glCompileShader(shader);
    
            // Check the compile status
            glGetShaderiv(shader, GL_COMPILE_STATUS, compiled, 0);
    
            if (compiled[0] == 0) {
                Log.e(TAG, "compile shader error: " + glGetShaderInfoLog(shader));
                glGetError();
                glDeleteShader(shader);
                return 0;
            }
            Log.i(TAG, "load " + type + " shader result: " + shader);
            return shader;
        }
    }
    

         我们主要是演练一下glViewport API的功能,其他逻辑就简单略过了。glViewport接口的介绍请点击:GLES2.0中文API-glViewport。可以看到该接口一共有四个参数,前两个参数x、y定位了当前视口的左下角的点,以像素为单位,后面两个参数width、height定义了当前视口的大小,程序员思维应该很容易理解,一个接口就确定好了我们视口的位置和大小。那想像一下,我们平时绘制时,直接调用glViewport(0, 0, mWidth, mHeight),表示视口左下角和屏幕左下角重合,视口大小就是屏幕大小,所以视口的中心点也就是屏幕的中心点,绘制时就是按照Opengl坐标,把整个屏幕投影在(-1,1)范围内,X/Y方向都是。

         明白了最基础的使用,我们再考虑一下,那如果我要添加一个水印,要指定水印的位置,要怎么办呢?对了,我们就可以修改视口的参数来达到这样的目的了,我们修改前两个参数,就可以变换视口的左下角;修改后两个参数就可以控制视口的大小。

         那要实现本例的效果,想必大家感觉也很简单了,四个三角形大小相同,且宽高归一化后都是0.5f,我们要画第一个左上角的三角形,它的左下角就是屏幕左侧的中间点的坐标(0,mHeight / 2);第二个右上角的三角形,它的左下角的坐标就是屏幕的中心点(mWidth / 2, mHeight / 2);第三个左下角的三角形,它的左下角坐标也就是屏幕的左下角(0,0);第四个三角形的左下角坐标就是屏幕最底线的中间点(mWidth / 2, 0)。最后两个参数宽高都一样,这样我们就画出来四个不同位置的三角形了。

         这里顺便说一下glClear(GL_COLOR_BUFFER_BIT)清屏的调用,不能在for循环中调用,否则就会出问题。比如我们把drawShape方法修改成如下:

        private void drawShape() {
            // Clear the color buffer
            for (int i = 0; i < 4; i++) {
                glClear(GL_COLOR_BUFFER_BIT);
                if (i == 0) {
                    glViewport(0, mHeight / 2, mWidth / 2, mHeight / 2);
                } else if (i == 1) {
                    glViewport(mWidth / 2, mHeight / 2, mWidth / 2, mHeight / 2);
                } else if (i == 2) {
                    glViewport(0, 0, mWidth / 2, mHeight / 2);
                } else if (i == 3) {
                    glViewport(mWidth / 2, 0, mWidth / 2, mHeight / 2);
                }
    
                // Use the program object
                glUseProgram(mProgramObject);
    
                mVertices.position(0);
                // Load the vertex data
                glVertexAttribPointer(vPosition, 3, GL_FLOAT, false, STRIDE, mVertices);
                glEnableVertexAttribArray(vPosition);
    
                mVertices.position(POSITION_COMPONENT_SIZE);
                glVertexAttribPointer(vColor, 4, GL_FLOAT, false, STRIDE, mVertices);
                glEnableVertexAttribArray(vColor);
    
                glDrawArrays(GL_TRIANGLES, 0, 3);
            }
        }

         我们把glClear(GL_COLOR_BUFFER_BIT)逻辑放在for循环里面了,那么想像一下,前三个三角形画完,都会执行glClear被清除,只有第四个三角形画完后退出for循环,所以也就只会显示最后一个三角形了。

         还有一个需要注意的,我们该实例中顶点的位置和颜色属性都是从mVertices中取值的,所以在给颜色赋值时,必须调用mVertices.position(POSITION_COMPONENT_SIZE)移动Buffer的起始位置,否则颜色取值就会出错,出来的结果跟我们意想的就会不一样,大家可以试一下。

         好了,glViewport API我们就介绍到这里吧,希望大家也能扎实的打好基础,否则实际工作中碰到的那复杂场景我们真的是束手无策。

    展开全文
  • glViewport

    2017-12-18 08:55:08
    glviewport(x,y,w,h)参数 x,y表示窗口左下方坐标,w宽度,h高度

    glviewport(x,y,w,h)参数

    x,y表示窗口左下方坐标,w宽度,h高度

    展开全文
  • 这里写自定义目录标题生成open3d项目报错:error LNK2001: 无法解析的外部符号 __imp_glViewport问题解决方法合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个...

    生成open3d项目报错:error LNK2001: 无法解析的外部符号 __imp_glViewport

    问题

    已启动生成…
    1>------ 已启动生成: 项目: Radar_Calculation, 配置: Release x64 ------
    1>stdafx.cpp
    1>Radar_Calculation.cpp
    1> 正在创建库 D:\CargoProjectCode\shijueC++\Radar_Calculation\x64\Release\Radar_Calculation.lib 和对象 D:\CargoProjectCode\shijueC++\Radar_Calculation\x64\Release\Radar_Calculation.exp
    1>Open3D.lib(ViewControl.obj) : error LNK2001: 无法解析的外部符号 __imp_glViewport
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glViewport
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glBindTexture
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glDeleteTextures
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDeleteTextures
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDeleteTextures
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDeleteTextures
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDeleteTextures
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDeleteTextures
    1>Open3D.lib(Simple2DShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(SimpleBlackShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDisable
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(PickingShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(Simple2DShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(SimpleBlackShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDrawArrays
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glGenTextures
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexImage2D
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(ImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(RGBDImageShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glTexParameteri
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(PickingShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(Simple2DShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(SimpleBlackShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glDepthFunc
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(PickingShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(SimpleBlackShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glEnable
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPointSize
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPointSize
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPointSize
    1>Open3D.lib(PickingShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPointSize
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonMode
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonMode
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonMode
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonMode
    1>Open3D.lib(SimpleBlackShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonMode
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonMode
    1>Open3D.lib(TextureSimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonOffset
    1>Open3D.lib(NormalShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonOffset
    1>Open3D.lib(PhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonOffset
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonOffset
    1>Open3D.lib(TexturePhongShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glPolygonOffset
    1>Open3D.lib(SimpleBlackShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glLineWidth
    1>Open3D.lib(SimpleShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glLineWidth
    1>Open3D.lib(Simple2DShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glLineWidth
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glClear
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glClear
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glClear
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glClearColor
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glClearColor
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glClearColor
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glClearDepth
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glClearDepth
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glClearDepth
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glFinish
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glFinish
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glFinish
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glPixelStorei
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glReadBuffer
    1>Open3D.lib(VisualizerRender.obj) : error LNK2001: 无法解析的外部符号 __imp_glReadPixels
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glReadPixels
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glReadPixels
    1>Open3D.lib(VisualizerWithEditing.obj) : error LNK2001: 无法解析的外部符号 __imp_glColorMask
    1>Open3D.lib(VisualizerWithVertexSelection.obj) : error LNK2001: 无法解析的外部符号 __imp_glColorMask
    1>Open3D.lib(ImageMaskShader.obj) : error LNK2001: 无法解析的外部符号 __imp_glBlendFunc
    1>Open3D_3rdparty_glew.lib(glew.obj) : error LNK2001: 无法解析的外部符号 __imp_glGetIntegerv
    1>Open3D_3rdparty_glew.lib(glew.obj) : error LNK2001: 无法解析的外部符号 __imp_glGetString
    1>Open3D_3rdparty_glew.lib(glew.obj) : error LNK2001: 无法解析的外部符号 __imp_wglGetCurrentDC
    1>Open3D_3rdparty_glew.lib(glew.obj) : error LNK2001: 无法解析的外部符号 __imp_wglGetProcAddress
    1>D:\CargoProjectCode\shijueC++\Radar_Calculation\x64\Release\Radar_Calculation.exe : fatal error LNK1120: 27 个无法解析的外部命令
    1>已完成生成项目“Radar_Calculation.vcxproj”的操作 - 失败。
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    解决方法

    在VS中“项目”——“属性”——“连接器”——“输入”——“附加依赖项”中添加缺失的库,经过反复检查缺少opengl32.lib,加上生成成功。
    在这里插入图片描述

    展开全文
  • 其函数原型为:glViewport(GLint x,GLint y,GLsizei width,GLsizei height) x,y 以像素为单位,指定了视口的左下角位置。 width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。 在默认情况下...

    其函数原型为:glViewport(GLint x,GLint y,GLsizei width,GLsizei height)
    x,y 以像素为单位,指定了视口的左下角位置。
    width,height 表示这个视口矩形的宽度和高度,根据窗口的实时变化重绘窗口。

    在默认情况下,视口被设置为占据打开窗口的整个像素矩形,窗口大小和设置视口大小相同,所以为了选择一个更小的绘图区域,就可以用glViewport函数来实现这一变换,在窗口中定义一个像素矩形,最终将图像映射到这个矩形中。例如可以对窗口区域进行划分,在同一个窗口中显示分割屏幕的效果,以显示多个视图。

    
    #include "stdafx.h"
    #include <math.h>
    #define GLUT_DISABLE_ATEXIT_HACK
    #include "gl/glut.h"
     
    void myDisplay()
    {
     glClear(GL_COLOR_BUFFER_BIT);
     glColor3f(1.0, 0.0, 0.0);
     //画分割线,分成四个视区  
     glViewport(0, 0, 400, 400);
     glBegin(GL_LINES);
     glVertex2f(-1.0, 0);
     glVertex2f(1.0, 0);
     glVertex2f(0.0, -1.0);
     glVertex2f(0.0, 1.0);
     glEnd();
     
     //定义在左下角的区域  
     glColor3f(0.0, 1.0, 0.0);
     glViewport(0, 0, 200, 200);
     glBegin(GL_POLYGON);
     glVertex2f(-0.5, -0.5);
     glVertex2f(-0.5, 0.5);
     glVertex2f(0.5, 0.5);
     glVertex2f(0.5, -0.5);
     glEnd();
     
     //定义在右上角的区域  
     glColor3f(0.0, 0.0, 1.0);
     glViewport(200, 200, 200, 200);//注意,后面这两个参数是高度和宽度,而不是坐标  
     glBegin(GL_POLYGON);
     glVertex2f(-0.5, -0.5);
     glVertex2f(-0.5, 0.5);
     glVertex2f(0.5, 0.5);
     glVertex2f(0.5, -0.5);
     glEnd();
     
     //定义在左上角的区域  
     glColor3f(1.0, 0.0, 0.0);
     glViewport(0, 200, 200, 200);  
     glBegin(GL_POLYGON);
     glVertex2f(-0.5, -0.5);
     glVertex2f(-0.5, 0.5);
     glVertex2f(0.5, 0.5);
     glVertex2f(0.5, -0.5);
     glEnd();
     
     //定义在右下角  
     glColor3f(1.0, 1.0, 1.0);
     glViewport(200, 0, 200, 200);
     glBegin(GL_POLYGON);
     glVertex2f(-0.5, -0.5);
     glVertex2f(-0.5, 0.5);
     glVertex2f(0.5, 0.5);
     glVertex2f(0.5, -0.5);
     glEnd();
     glFlush();
     }
     
    int main(int argc, char *argv[])
    {
     glutInit(&argc, argv);
     glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
     glutInitWindowPosition(100, 100);
     glutInitWindowSize(400, 400);
     glutCreateWindow("第一个OpenGL程序");
     glutDisplayFunc(&myDisplay);
     glutMainLoop();
     return 0;
    }
    

    在这里插入图片描述

    展开全文
  • 在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho.ortho实际上是orthographic projection正交投影的缩写。glViewport是视口变换它是设置视口,它设置的视口的左下角,以及宽度和高度。glOrtho是窗口...
  • GLES2.0中文API-glViewport

    千次阅读 2018-09-16 15:52:29
    glViewport- 设置视口 C规范 void glViewport(GLint x,GLint y,GLsizei width,GLsizei height); 参数 x, y  指定视口矩形的左下角坐标,以像素为单位,初始值为(0,0)。 width, height  指定...
  • OpenGL的glViewPort窗口设置函数实现分屏 之前实现过全景图片查看(OpenGL的几何变换3之内观察全景图),那么我们需要进行分屏该如何实现呢?如下图: 没错就是以前提过的glViewPort函数,废话不多说了,我...
  •  gl.glViewport(-maxOffset + viewportOffset * k, -maxOffset  + viewportOffset * k, this.width - viewportOffset * 2 * k  + maxOffset * 2, this.height - viewportOffset * 2 * k  + maxOffset * 2); ...
  • OpenGL glViewport()函数

    千次阅读 2018-12-21 09:44:38
    1.glViewport() 用来设置视口大小 void glViewport(GLint x,GLint y,GLsizei width,GLsizei height); 对于一个OpenGL坐标(xnd,ynd),它变换后的坐标为(Xw,Yw),那么变换公式为 解释一下这个公式的意义:视口...
  • glViewport定义视口,即视见窗口,是从世界坐标系窗口到屏幕坐标系窗口的映射,决定了gluOrtho2D定义的剪裁main如何映射到屏幕上,通过调节glViewport的参数, 可以调节模型在屏幕窗口上的缩放和显示位置。...
  • OpenGL多视口变换函数:glViewport使用 glViewport是OpenGL中的一个函数。计算机图形学中,在屏幕上打开窗口的任务是由窗口系统,而不是OpenGL负责的 1.功能glViewport在默认情况下,视口被设置为...
  • 在刚使用opengl时,会遇到对opengles中的一些视角等理解,需要用到glViewport,glOrtho,glFrustum 等函数,下面针对这些函数做一些说明 viewport建立视口,是视窗函数,描述opengl渲染出的图像如何映射到...
  • OpenGL QT glViewport 函数的作用

    千次阅读 2015-09-23 22:12:51
     void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)   函数作用: 改变OpengL描绘结果原点在屏幕的位置及尺寸   参数说明: x 以像素为单位,设置投影结果的原点在屏幕水平方向的位置,屏幕最左...
  • 窗口与显示主要与三个量有关:世界坐标,窗口大小和视口大小。...glViewport(int x, int y, GlLsizei w, Glsizei h)//定义视口大小 glutInitWindowSize(int width, int height)//定义窗口大小 gl...
  • 如果出现编译错误,函数未定义 ||=== Build: Debug in test3 (compiler: GNU GCC Compiler) ===| obj\Debug\main.o||In function `resize':| undefined reference to `_imp__glViewport'| undefined reference to `...
  • Viewport and project code glViewport(viewportX, viewportY, viewportW, viewportH);. glEnable(GL_SCISSOR_TEST); glScissor(viewportX, viewportY, viewportW, viewportH); glMatrixMode(GL_PROJECTION); ...
  • 在OpenGL中有两个比较重要的投影变换函数,glViewport和glOrtho. glOrtho是创建一个正交平行的视景体。 一般用于物体不会因为离屏幕的远近而产生大小的变换的情况。比如,常用的工程中的制图等。需要比较精确的显示...
  • 调用glViewPort函数来决定视见区域,告诉OpenGL应把渲染之后的图形绘制在窗体的哪个部位。当视见区域是整个窗体时,OpenGL将把渲染结果绘制到整个窗口。  glViewPort(x:GLInt;y:GLInt;Width:GLSizei;Height:...
  • glViewport()与glOrtho()函数的理解glViewport()与glOrtho()函数的理解glViewport()与glOrtho()函数的理解glViewport()与glOrtho()函数的理解
  • 在跟着LearnOpenGL CN学习OpenGL学习时,在 你好,窗口 这一步,全文中源代码复制过来的时候会出现 error LNK2001: 无法解析的外部符号 _glad_ 这类错误 解决办法就是,添加现有项中把 glad.c 添加进来 ...
  • glViewport 用例

    2017-11-17 20:48:00
    glViewport决定了将OpengGL渲染的图形,显示在屏幕的什么位置,第一和第二参数决定开始渲染的位置,后两个参数分别为宽和高 代码 #include <gl/glut.h> void display() { glClear( GL_COLOR_BUFFER_BIT ); ...
  • glViewport定义视口,即视见窗口,是从世界坐标系窗口到屏幕坐标系窗口的映射,决定了gluOrtho2D定义的剪裁main如何映射到屏幕上,通过调节glViewport的参数, 可以调节模型在屏幕窗口上的缩放和显示位置。...
  • glViewport含义

    2017-11-03 16:47:40
    glViewport(GLint x,GLint y,GLsizei width,GLsizei height)为其函数原型。 X,Y————以像素为单位,指定了视口的左下角(在第一象限内,以(0,0)为原点的)位置。 width,height————表示这个视口矩形的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,566
精华内容 5,826
关键字:

glviewport

友情链接: WMSProject-master (1).zip