<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: 从零开始学习OpenGL ES之六 &#8211; 纹理及纹理映射</title>
	<atom:link href="http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/feed" rel="self" type="application/rss+xml" />
	<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84</link>
	<description>iPhone 新闻，编程，技巧与提示，代码，教程</description>
	<lastBuildDate>Tue, 07 Feb 2012 09:36:03 -0600</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Clara</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/comment-page-1#comment-505</link>
		<dc:creator>Clara</dc:creator>
		<pubDate>Wed, 14 Sep 2011 08:26:56 +0000</pubDate>
		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=657#comment-505</guid>
		<description>1024*768我是这么做的，放到1024*1024中，一切OK~
但是换成640*480 连续画图时 就会出现问题：
（1）出现黑色横条
（2）卡死

以下为原代码，希望大神指教，感激涕零啊~&gt;_&lt;~

顶点：const GLfloat spriteVertices[] = {
    -1.0f, 1.67f,
    -1.0f, -1.0f,
    1.0f, -1.0f,
    1.0f, 1.67f,
};

const GLfloat spriteTexcoords[] = {
    0, 1.0,
    0, 0,
    1, 0,
    1, 1.0,
};
初始化：
- (void)initTextureAndBuffer
{
    mDataPtr = (GLubyte *) calloc(1024 * 1024 * 4, sizeof(GLubyte));
    
    glViewport(0, 0, 1024, 768);
	glMatrixMode(GL_PROJECTION);

    glLoadIdentity();
    glOrthof(-1.0f, 1.0, -1.0f, 1.0f, 0, 0);
	glMatrixMode(GL_MODELVIEW);
    
    glVertexPointer(2, GL_FLOAT, 0, spriteVertices);    // 纹理映射在窗口中的对应的顶点信息
	glEnableClientState(GL_VERTEX_ARRAY);
	glTexCoordPointer(2, GL_FLOAT, 0, spriteTexcoords); // 纹理需要被映射部分的坐标
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);

    glGenTextures(1, &amp;spriteTexture);
    glBindTexture(GL_TEXTURE_2D, spriteTexture);
    
    // Set the texture parameters to use a minifying filter and a linear filer (weighted average)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    
    // Enable use of the texture
    glEnable(GL_TEXTURE_2D);
}
画图：
- (void)drawImageWithOpenGL:(UIImage *)image
{
    CGImageRef      spriteImage = image.CGImage;
	CGContextRef    spriteContext;
	size_t          width, height;
	
    if (spriteImage == NULL) {
        return;
    }
    
    width = CGImageGetWidth(spriteImage);
    height = CGImageGetHeight(spriteImage);
     width = 1024;
     height = 768;
    
    // CoreGraphics draw
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(spriteImage);
    
    //spriteData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte));
    memset(mDataPtr, 0, sizeof(mDataPtr));
    spriteContext = CGBitmapContextCreate(mDataPtr, width, height, 
                                          8, width * 4, colorSpace, 
                                          kCGImageAlphaPremultipliedLast);
    
    CGContextClearRect(spriteContext, CGRectMake(0, 0, 1024, 768));
    CGContextTranslateCTM(spriteContext, 0.0, height);
    CGContextScaleCTM(spriteContext, 1.0, -1.0);
    CGContextDrawImage(spriteContext, CGRectMake(0.0, 0.0, (CGFloat)1024, (CGFloat)768),spriteImage);
    CGContextRelease(spriteContext);
    
    glPushMatrix();
    //glScalef (1.6, 1.6, 1);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, (mDataPtr));
    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
	[context presentRenderbuffer:GL_RENDERBUFFER_OES]; // present two part draw
    glPopMatrix();
}</description>
		<content:encoded><![CDATA[<p>1024*768我是这么做的，放到1024*1024中，一切OK~<br />
但是换成640*480 连续画图时 就会出现问题：<br />
（1）出现黑色横条<br />
（2）卡死</p>
<p>以下为原代码，希望大神指教，感激涕零啊~&gt;_&lt;~</p>
<p>顶点：const GLfloat spriteVertices[] = {<br />
    -1.0f, 1.67f,<br />
    -1.0f, -1.0f,<br />
    1.0f, -1.0f,<br />
    1.0f, 1.67f,<br />
};</p>
<p>const GLfloat spriteTexcoords[] = {<br />
    0, 1.0,<br />
    0, 0,<br />
    1, 0,<br />
    1, 1.0,<br />
};<br />
初始化：<br />
- (void)initTextureAndBuffer<br />
{<br />
    mDataPtr = (GLubyte *) calloc(1024 * 1024 * 4, sizeof(GLubyte));</p>
<p>    glViewport(0, 0, 1024, 768);<br />
	glMatrixMode(GL_PROJECTION);</p>
<p>    glLoadIdentity();<br />
    glOrthof(-1.0f, 1.0, -1.0f, 1.0f, 0, 0);<br />
	glMatrixMode(GL_MODELVIEW);</p>
<p>    glVertexPointer(2, GL_FLOAT, 0, spriteVertices);    // 纹理映射在窗口中的对应的顶点信息<br />
	glEnableClientState(GL_VERTEX_ARRAY);<br />
	glTexCoordPointer(2, GL_FLOAT, 0, spriteTexcoords); // 纹理需要被映射部分的坐标<br />
	glEnableClientState(GL_TEXTURE_COORD_ARRAY);</p>
<p>    glGenTextures(1, &amp;spriteTexture);<br />
    glBindTexture(GL_TEXTURE_2D, spriteTexture);</p>
<p>    // Set the texture parameters to use a minifying filter and a linear filer (weighted average)<br />
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);<br />
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);</p>
<p>    // Enable use of the texture<br />
    glEnable(GL_TEXTURE_2D);<br />
}<br />
画图：<br />
- (void)drawImageWithOpenGL:(UIImage *)image<br />
{<br />
    CGImageRef      spriteImage = image.CGImage;<br />
	CGContextRef    spriteContext;<br />
	size_t          width, height;</p>
<p>    if (spriteImage == NULL) {<br />
        return;<br />
    }</p>
<p>    width = CGImageGetWidth(spriteImage);<br />
    height = CGImageGetHeight(spriteImage);<br />
     width = 1024;<br />
     height = 768;</p>
<p>    // CoreGraphics draw<br />
    CGColorSpaceRef colorSpace = CGImageGetColorSpace(spriteImage);</p>
<p>    //spriteData = (GLubyte *) calloc(width * height * 4, sizeof(GLubyte));<br />
    memset(mDataPtr, 0, sizeof(mDataPtr));<br />
    spriteContext = CGBitmapContextCreate(mDataPtr, width, height,<br />
                                          8, width * 4, colorSpace,<br />
                                          kCGImageAlphaPremultipliedLast);</p>
<p>    CGContextClearRect(spriteContext, CGRectMake(0, 0, 1024, 768));<br />
    CGContextTranslateCTM(spriteContext, 0.0, height);<br />
    CGContextScaleCTM(spriteContext, 1.0, -1.0);<br />
    CGContextDrawImage(spriteContext, CGRectMake(0.0, 0.0, (CGFloat)1024, (CGFloat)768),spriteImage);<br />
    CGContextRelease(spriteContext);</p>
<p>    glPushMatrix();<br />
    //glScalef (1.6, 1.6, 1);<br />
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1024, 1024, 0, GL_RGBA, GL_UNSIGNED_BYTE, (mDataPtr));<br />
    glDrawArrays(GL_TRIANGLE_FAN, 0, 4);<br />
	[context presentRenderbuffer:GL_RENDERBUFFER_OES]; // present two part draw<br />
    glPopMatrix();<br />
}</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: bagusflyer</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/comment-page-1#comment-504</link>
		<dc:creator>bagusflyer</dc:creator>
		<pubDate>Wed, 14 Sep 2011 06:48:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=657#comment-504</guid>
		<description>放到1024x1024的图片中。所以说最好的方式是把一些图片合在一起。</description>
		<content:encoded><![CDATA[<p>放到1024&#215;1024的图片中。所以说最好的方式是把一些图片合在一起。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Clara</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/comment-page-1#comment-503</link>
		<dc:creator>Clara</dc:creator>
		<pubDate>Wed, 14 Sep 2011 06:36:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=657#comment-503</guid>
		<description>你好~
“用于纹理的图像宽和高必须为乘方，比如 2, 4, 8, 16, 32, 64, 128, 256, 512, 或 1024。例如图像可能为 64×128 或 512×512。”

但是，如果我要画的图是640*480,二者都不是2的幂次方，如何解决呢？</description>
		<content:encoded><![CDATA[<p>你好~<br />
“用于纹理的图像宽和高必须为乘方，比如 2, 4, 8, 16, 32, 64, 128, 256, 512, 或 1024。例如图像可能为 64×128 或 512×512。”</p>
<p>但是，如果我要画的图是640*480,二者都不是2的幂次方，如何解决呢？</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: arkf</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/comment-page-1#comment-495</link>
		<dc:creator>arkf</dc:creator>
		<pubDate>Wed, 31 Aug 2011 01:38:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=657#comment-495</guid>
		<description>你好 我想问下 为什么我下载了你这个例子，运行后是白屏呢，需要点一下home键 ，重新进入 才能正常显示动画。</description>
		<content:encoded><![CDATA[<p>你好 我想问下 为什么我下载了你这个例子，运行后是白屏呢，需要点一下home键 ，重新进入 才能正常显示动画。</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: aelam</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/comment-page-1#comment-279</link>
		<dc:creator>aelam</dc:creator>
		<pubDate>Sun, 29 Aug 2010 13:09:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=657#comment-279</guid>
		<description>牛阿, 我拜你为师 
师傅在上</description>
		<content:encoded><![CDATA[<p>牛阿, 我拜你为师<br />
师傅在上</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: kuian2010</title>
		<link>http://www.iphone-geek.cn/%e7%bc%96%e7%a8%8b/%e4%bb%8e%e9%9b%b6%e5%bc%80%e5%a7%8b%e5%ad%a6%e4%b9%a0opengl-es%e4%b9%8b%e5%85%ad-%e7%ba%b9%e7%90%86%e5%8f%8a%e7%ba%b9%e7%90%86%e6%98%a0%e5%b0%84/comment-page-1#comment-261</link>
		<dc:creator>kuian2010</dc:creator>
		<pubDate>Sat, 14 Aug 2010 08:10:07 +0000</pubDate>
		<guid isPermaLink="false">http://www.iphone-geek.cn/?p=657#comment-261</guid>
		<description>想请教一下楼主：
对于opengl中的2D纹理，
static const Vertex3D vertices[] = {
        {-1.0,  1.0, -0.0},
        { 1.0,  1.0, -0.0},
        {-1.0, -1.0, -0.0},
        { 1.0, -1.0, -0.0}
    };
其中x,y,值都在-1.0和1.0之间，若加大值，则会全屏放大。
而这时候只有将z值缩减-5.0或者-10.0才能看到完整的图片。

但是这个z值却不好确定，我只有不断的测试效果和估计，请问有公式计算出来吗？

起始我想要的效果就是：在屏幕大小为480x320上面显示32x32大小的一张图片，而这张图片绘制在点100x100的地方，不想放大图片。</description>
		<content:encoded><![CDATA[<p>想请教一下楼主：<br />
对于opengl中的2D纹理，<br />
static const Vertex3D vertices[] = {<br />
        {-1.0,  1.0, -0.0},<br />
        { 1.0,  1.0, -0.0},<br />
        {-1.0, -1.0, -0.0},<br />
        { 1.0, -1.0, -0.0}<br />
    };<br />
其中x,y,值都在-1.0和1.0之间，若加大值，则会全屏放大。<br />
而这时候只有将z值缩减-5.0或者-10.0才能看到完整的图片。</p>
<p>但是这个z值却不好确定，我只有不断的测试效果和估计，请问有公式计算出来吗？</p>
<p>起始我想要的效果就是：在屏幕大小为480&#215;320上面显示32&#215;32大小的一张图片，而这张图片绘制在点100&#215;100的地方，不想放大图片。</p>
]]></content:encoded>
	</item>
</channel>
</rss>

