亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? imaging.c

?? OpeNGL超級(jí)寶典源代碼. OpeNGL超級(jí)寶典源代碼.
?? C
字號(hào):
// Imaging.c
// OpenGL SuperBible
// Demonstrates Imaging Operations
// Program by Richard S. Wright Jr.

#include "../../Common/OpenGLSB.h"	// System and OpenGL Stuff
#include "../../Common/GLTools.h"	// OpenGL toolkit
#include <math.h>
#include <stdio.h>

//////////////////////////////////////////////////////////////////
// Module globals to save source image data
static GLubyte *pImage = NULL;
static GLint iWidth, iHeight, iComponents;
static GLenum eFormat;

// Global variable to store desired drawing mode
static GLint        iRenderMode = 1;    
static GLboolean    bHistogram = GL_FALSE;  

        

//////////////////////////////////////////////////////////////////
// Define function pointers for imaging subset
#ifndef __APPLE__
// These typdefs are found in glext.h
PFNGLHISTOGRAMPROC				glHistogram = NULL;
PFNGLGETHISTOGRAMPROC			glGetHistogram = NULL;
PFNGLCOLORTABLEPROC				glColorTable = NULL;
PFNGLCONVOLUTIONFILTER2DPROC	glConvolutionFilter2D = NULL;
#endif


//////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering
// context. 
void SetupRC(void)
    {
#ifndef __APPLE__
	glHistogram = gltGetExtensionPointer("glHistogram");
	glGetHistogram = gltGetExtensionPointer("glGetHistogram");
	glColorTable = gltGetExtensionPointer("glColorTable");
	glConvolutionFilter2D = gltGetExtensionPointer("glConvolutionFilter2D");
#endif

    // Black background
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
	
    // Load the horse image
	glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
   	pImage = gltLoadTGA("horse.tga", &iWidth, &iHeight, &iComponents, &eFormat);
    }

void ShutdownRC(void)
    {
    // Free the original image data
    free(pImage);
    }


///////////////////////////////////////////////////////////////////////////////
// Reset flags as appropriate in response to menu selections
void ProcessMenu(int value)
	{
    // For historgram, do not change render mode, just set
    // histogram flag to true
    if(value == 6)  // Histogram
        {
        bHistogram = GL_TRUE;
        glutPostRedisplay();
        return;
        }
        
    if(value == 0)
	     // Save image
        gltWriteTGA("ScreenShot.tga");
    else
        // Change render mode index to match menu entry index
        iRenderMode = value;
        
        
    // Trigger Redraw
	glutPostRedisplay();
	}



///////////////////////////////////////////////////////////////////////        
// Called to draw scene
void RenderScene(void)
    {
    GLint i;                    // Looping variable
    GLint iViewport[4];         // Viewport
	GLint iLargest;				// Largest histogram value

    static GLubyte invertTable[256][3];// Inverted color table

    // Do a black and white scaling
    static GLfloat lumMat[16] = { 0.30f, 0.30f, 0.30f, 0.0f,
                                  0.59f, 0.59f, 0.59f, 0.0f,
                                  0.11f, 0.11f, 0.11f, 0.0f,
                                  0.0f,  0.0f,  0.0f,  1.0f };
                   
    static GLfloat mSharpen[3][3] = {  // Sharpen convolution kernel
         {0.0f, -1.0f, 0.0f},
         {-1.0f, 5.0f, -1.0f },
         {0.0f, -1.0f, 0.0f }};

    static GLfloat mEmboss[3][3] = {   // Emboss convolution kernel
        { 2.0f, 0.0f, 0.0f },
        { 0.0f, -1.0f, 0.0f },
        { 0.0f, 0.0f, -1.0f }};
        
    static GLint histoGram[256];    // Storeage for histogram statistics
   
    // Clear the window with current clearing color
    glClear(GL_COLOR_BUFFER_BIT);
    
    // Current Raster Position always at bottom left hand corner of window
    glRasterPos2i(0, 0);
    glGetIntegerv(GL_VIEWPORT, iViewport);
    glPixelZoom((GLfloat) iViewport[2] / (GLfloat)iWidth, (GLfloat) iViewport[3] / (GLfloat)iHeight); 

    if(bHistogram == GL_TRUE)   // Collect Historgram data
        {
        // We are collecting luminance data, use our conversion formula
        // instead of OpenGL's (which just adds color components together)
        glMatrixMode(GL_COLOR);
        glLoadMatrixf(lumMat);
        glMatrixMode(GL_MODELVIEW);

        // Start collecting histogram data, 256 luminance values
        glHistogram(GL_HISTOGRAM, 256, GL_LUMINANCE, GL_FALSE);
        glEnable(GL_HISTOGRAM);
        }
        
    // Do image operation, depending on rendermode index
    switch(iRenderMode)
        {
        case 5:     // Sharpen image
            glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_RGB, 3, 3, GL_LUMINANCE, GL_FLOAT, mSharpen);
            glEnable(GL_CONVOLUTION_2D);
            break;

        case 4:     // Emboss image
            glConvolutionFilter2D(GL_CONVOLUTION_2D, GL_RGB, 3, 3, GL_LUMINANCE, GL_FLOAT, mEmboss);
            glEnable(GL_CONVOLUTION_2D);
            glMatrixMode(GL_COLOR);
            glLoadMatrixf(lumMat);
            glMatrixMode(GL_MODELVIEW);
            break;
        
        case 3:     // Invert Image
            for(i = 0; i < 255; i++)
                {
                invertTable[i][0] = (GLubyte)(255 - i);
                invertTable[i][1] = (GLubyte)(255 - i);
                invertTable[i][2] = (GLubyte)(255 - i);
                }
                
            glColorTable(GL_COLOR_TABLE, GL_RGB, 256, GL_RGB, GL_UNSIGNED_BYTE, invertTable);
            glEnable(GL_COLOR_TABLE);
            break;
        
        case 2:     // Brighten Image
            glMatrixMode(GL_COLOR);
            glScalef(1.25f, 1.25f, 1.25f);
            glMatrixMode(GL_MODELVIEW);
            break;
            
        case 1:     // Just do a plain old image copy
        default:
                    // This line intentially left blank
            break;
        }
		
    // Do the pixel draw
    glDrawPixels(iWidth, iHeight, eFormat, GL_UNSIGNED_BYTE, pImage);
    
    // Fetch and draw histogram?
    if(bHistogram == GL_TRUE)  
        {
        // Read histogram data into buffer
        glGetHistogram(GL_HISTOGRAM, GL_TRUE, GL_LUMINANCE, GL_INT, histoGram);
        
        // Find largest value for scaling graph down
		iLargest = 0;
        for(i = 0; i < 255; i++)
            if(iLargest < histoGram[i])
                iLargest = histoGram[i];
        
        // White lines
        glColor3f(1.0f, 1.0f, 1.0f);
        glBegin(GL_LINE_STRIP);
            for(i = 0; i < 255; i++)
                glVertex2f((GLfloat)i, (GLfloat)histoGram[i] / (GLfloat) iLargest * 128.0f); 
        glEnd();

        bHistogram = GL_FALSE;
        glDisable(GL_HISTOGRAM);
        }
    
        
    // Reset everyting to default
    glMatrixMode(GL_COLOR);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glDisable(GL_CONVOLUTION_2D);
    glDisable(GL_COLOR_TABLE);                                                    

    // Show our hard work...
    glutSwapBuffers();
    }



void ChangeSize(int w, int h)
    {
    // Prevent a divide by zero, when window is too short
    // (you cant make a window of zero width).
    if(h == 0)
        h = 1;

    glViewport(0, 0, w, h);
        
	// Reset the coordinate system before modifying
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
	
    // Set the clipping volume
    gluOrtho2D(0.0f, (GLfloat) w, 0.0, (GLfloat) h);
        
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();    
    }

/////////////////////////////////////////////////////////////
// Main program entrypoint
int main(int argc, char* argv[])
    {
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GL_DOUBLE);
    glutInitWindowSize(600 ,600);
    glutCreateWindow("OpenGL Imaging subset");

    // Check for imaging subset, must be done after window
    // is create or there won't be an OpenGL context to query
    if(gltIsExtSupported("GL_ARB_imaging") == 0)
        {
        printf("Imaging subset not supported\r\n");
        return 0;
        }

    glutReshapeFunc(ChangeSize);
    glutDisplayFunc(RenderScene);
    
    // Create the Menu and add choices
	glutCreateMenu(ProcessMenu);
	glutAddMenuEntry("Save Image",0);
    glutAddMenuEntry("Raw Stretched Image",1);
    glutAddMenuEntry("Increase Contrast",2);
    glutAddMenuEntry("Invert Color", 3);
    glutAddMenuEntry("Emboss Image", 4);
    glutAddMenuEntry("Sharpen Image", 5);
    glutAddMenuEntry("Histogram", 6);
    
    glutAttachMenu(GLUT_RIGHT_BUTTON);
    
    SetupRC();          // Do setup
    
    glutMainLoop();     // Main program loop

    ShutdownRC();       // Do shutdown

    return 0;
    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区极速播放 | 日本三级韩国三级欧美三级| 久久综合久久综合久久综合| 色综合av在线| 国产91丝袜在线播放九色| 亚洲成人高清在线| 中文字幕亚洲一区二区av在线| 91精品国产综合久久香蕉麻豆| 欧美一区二区三区免费观看视频| 粉嫩嫩av羞羞动漫久久久| 日韩av网站在线观看| 亚洲天堂免费在线观看视频| 精品欧美乱码久久久久久 | 国产美女精品一区二区三区| 亚洲一线二线三线久久久| 国产偷v国产偷v亚洲高清| 69堂精品视频| 欧美性xxxxxxxx| 91麻豆文化传媒在线观看| 丁香婷婷综合网| 久久99精品国产.久久久久久| 亚洲第一久久影院| 亚洲精品成人精品456| 国产精品―色哟哟| 久久久综合精品| 精品国产一区二区精华| 在线观看91av| 5858s免费视频成人| 欧美日韩日日摸| 欧美日韩专区在线| 日本韩国精品一区二区在线观看| av在线这里只有精品| 国产**成人网毛片九色 | 中文子幕无线码一区tr| 久久久美女艺术照精彩视频福利播放| 91麻豆精品国产91久久久久| 欧美三级视频在线观看 | 国产亚洲美州欧州综合国| 日韩免费高清av| 欧美大胆人体bbbb| 日韩三级视频在线观看| 精品国内片67194| 精品日韩一区二区| 久久日韩粉嫩一区二区三区| 久久久久成人黄色影片| 国产喷白浆一区二区三区| 久久嫩草精品久久久精品| 久久久久久久久99精品| 中文字幕成人网| 国产精品国产馆在线真实露脸| 国产精品免费aⅴ片在线观看| 国精产品一区一区三区mba视频| 日av在线不卡| 黄色日韩网站视频| 国产高清不卡一区二区| thepron国产精品| 色偷偷一区二区三区| 欧美揉bbbbb揉bbbbb| 日韩一级二级三级| 久久综合色天天久久综合图片| 国产欧美一区二区精品久导航 | 中文字幕一区二区三区av| 亚洲欧美另类小说视频| 午夜精品在线视频一区| 免费成人在线观看视频| 国产一区二区免费在线| 99re免费视频精品全部| 欧美日韩一区在线观看| 精品久久久久久久久久久久久久久久久 | 亚洲精品一二三| 日韩精品久久理论片| 国产精品一级黄| 色狠狠色狠狠综合| 精品国产伦一区二区三区观看方式 | 久久久午夜精品理论片中文字幕| 国产精品美女久久久久久久久久久 | 99精品欧美一区| 欧美二区在线观看| 国产亚洲欧洲997久久综合| 亚洲另类中文字| 久久国产尿小便嘘嘘| www.日本不卡| 欧美一区二区三区四区久久| 亚洲国产精品激情在线观看| 亚洲成a人片综合在线| 国产黑丝在线一区二区三区| 中文天堂在线一区| 亚洲二区在线观看| 国产夫妻精品视频| 欧美夫妻性生活| 最新日韩av在线| 精品一区二区三区香蕉蜜桃| 日本韩国一区二区| 久久久.com| 日本欧美一区二区在线观看| 成人精品一区二区三区中文字幕| 欧美日本高清视频在线观看| 中文字幕在线不卡一区二区三区| 日本视频一区二区三区| 日本精品视频一区二区三区| 2023国产精品自拍| 天天爽夜夜爽夜夜爽精品视频| 成人晚上爱看视频| 精品久久久三级丝袜| 一区二区三区.www| 成人高清在线视频| 久久无码av三级| 麻豆精品新av中文字幕| 欧美综合一区二区三区| 国产精品国产三级国产三级人妇| 久久91精品久久久久久秒播| 欧美三级在线看| 一区二区在线观看av| 成人免费三级在线| 欧美不卡激情三级在线观看| 午夜日韩在线观看| 日本韩国一区二区三区视频| 中文字幕一区二区三区精华液| 国精产品一区一区三区mba视频| 91精品国产综合久久精品| 亚洲最大成人综合| 91搞黄在线观看| 亚洲欧美另类图片小说| 成人看片黄a免费看在线| 精品欧美一区二区久久| 蜜桃av一区二区三区电影| 欧美日韩精品欧美日韩精品一| 一区二区三区av电影| 色综合 综合色| 亚洲免费av观看| 国产精品美女久久久久久久久久久| 另类欧美日韩国产在线| 7777精品伊人久久久大香线蕉最新版 | 国产精品99久久久久久久女警| 日韩一区二区不卡| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美亚洲一区二区三区四区| 自拍偷在线精品自拍偷无码专区| 成人国产精品免费观看| 中文字幕一区二区三区在线不卡 | 国产麻豆91精品| www激情久久| 懂色av中文字幕一区二区三区| 久久精品人人做人人综合| 国产不卡在线一区| 国产精品成人免费精品自在线观看| 成人精品视频网站| 亚洲视频在线观看三级| 欧美专区在线观看一区| 日韩高清一区在线| 精品久久五月天| 成人三级在线视频| 亚洲精品五月天| 欧美美女一区二区在线观看| 日本女人一区二区三区| 久久综合色之久久综合| 成av人片一区二区| 亚洲午夜免费视频| 欧美v日韩v国产v| 波多野结衣中文一区| 亚洲自拍都市欧美小说| 3751色影院一区二区三区| 国产乱色国产精品免费视频| 18成人在线观看| 91精品中文字幕一区二区三区| 麻豆精品视频在线| 中文字幕 久热精品 视频在线| 91丨porny丨在线| 青娱乐精品在线视频| 日本一区二区三区在线不卡 | 久久久国产午夜精品| av亚洲精华国产精华| 亚洲成av人片在线观看| 久久这里只精品最新地址| 波多野结衣视频一区| 午夜不卡在线视频| 国产欧美一区二区精品忘忧草| 欧美这里有精品| 国产精品一区二区男女羞羞无遮挡| ㊣最新国产の精品bt伙计久久| 这里是久久伊人| av爱爱亚洲一区| 免费观看91视频大全| 最新国产精品久久精品| 日韩一二在线观看| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美极品美女视频| 欧美人妖巨大在线| 粉嫩av一区二区三区| 日韩av中文字幕一区二区三区| 国产精品视频线看| 日韩久久精品一区| 欧美性受极品xxxx喷水| 国产激情视频一区二区三区欧美| 亚洲人123区| 国产欧美日韩视频一区二区| 6080午夜不卡| 在线观看日韩高清av| 成人网页在线观看| 国内偷窥港台综合视频在线播放|