我正在try 以320x240永久渲染场景,以模拟feel classic 240p系统,并将其放大到屏幕的全尺寸.

我的问题是,虽然我可以使用设置分辨率的精灵和glOrtho来伪造这种效果,但它通常只是以更高的分辨率完全渲染,最终可能会稍微慢一点,旋转精灵最终会使分辨率明显高得多.

是否有某种方法可以使用OpenGL 1.1以320x240的速度渲染视口,然后将其放大以适应屏幕?

现在我正在使用它设置2D视口进行渲染,其中宽度和高度是画布的宽度和高度.

GL11.glViewport(0, 0, width, height);
GL11.glDepthFunc(GL11.GL_LEQUAL);
GL11.glClear(GL11.GL_ACCUM);
GL11.glMatrixMode(GL11.GL_PROJECTION);
GL11.glLoadIdentity();
GL11.glOrtho(0.0D, 320, 240, 0.0D, 0.0D, 100.0D); //320 and 240 is the "true size"
GL11.glMatrixMode(GL11.GL_MODELVIEW);
GL11.glLoadIdentity();

我听说过在纹理上进行渲染,但是我在OpenGL 1.1中找不到有关如何进行渲染的任何信息.

推荐答案

我听说过在纹理上进行渲染,但是我在OpenGL 1.1中找不到有关如何进行渲染的任何信息.

这是因为OpenGL 1.1是1997年的,实际上是century年前的四分之一.这里没有渲染到纹理.

最接近的是glCopyTexImage2D,它允许您将帧缓冲区内容复制到纹理对象中(从技术上讲,这将允许在GPU端发生,而无需往返于CPU和系统内存).因此,您基本上以内部分辨率渲染数据-仅使用帧缓冲区的一部分作为视口,将其复制到纹理中,然后使用该纹理和所需的过滤器在完整帧缓冲区上绘制一个矩形.

但需要注意的是,在GL 1.1中,GL_MAX_TEXTURE_SIZE保证至少是64,所以要以一种在任何符合GL 1.1的实现中都可以使用的方式来编写,您必须有代码将帧缓冲区纹理分割为64x64像素的分幅.

另一种 Select 是往返于系统内存,它涉及到用glReadPixels读回数据,并在应用glPixelZoom设置时通过glDrawPixels再次绘制数据.

Java相关问答推荐

JUnit—如何模拟局部变量对象方法调用

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

相同的Java SerializedLambda为implMethodKind返回不同的结果

如何从错误通道回复网关,使其不会挂起

由于 list 中的权限错误,Android未生成

测试何时使用Mockito强制转换对象会导致ClassCastException

通过Spring Security公开Spring Boot执行器端点

使用htmlunit和java单击按钮

JavaFX标签中的奇怪字符

如何在字节数组中反转UTF-8编码?

在打开搜索结果时,如何让Eclipse打开整个文件?

本机方法(JNI)总是编译的吗?

TinyDB问题,无法解析符号';上下文&

在具有Quarkus Panache的PostgreSQL中将JSON数据存储为JSONB时,会将其存储为转义字符串

Java CDI:@Singleton@Startup@Inject无法实现接口

Spring Mapstruct如何获取Lazy初始化实体字段的信息?

JavaFX中ListView中的问题

如何组合Mono和Flux

无法在 main 中创建对象

如何在连续运行 Google App Engine 应用程序之间保留数据库内容?