如何使用C++/STL执行以下等效操作?我想填充std::vector一系列值[min,max].
# Python
>>> x = range(0, 10)
>>> x
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
我想我可以使用std::generate_n并提供一个函子来生成序列,但我想知道是否有更简洁的方法使用STL这样做?
在WebGL中使用GLSL着色器的流行方式似乎是将它们嵌入到主html文件中.顶点和片段着色器嵌入在以下标记中:
<script id="shader-fs" type="x-shader/x-fragment">
Run Code Online (Sandbox Code Playgroud)
这与我在Mozilla Developer Network页面中的WebGL示例中看到的相同.
这适用于简单的应用程序,但是当你有一个带有许多着色器的复杂应用程序时,html文件会变得混乱.(我一直在编辑错误的着色器!)另外,如果你想重复使用着色器,这个方案很不方便.
所以我考虑将这些着色器放在一个单独的XML文件中,并使用XMLHttpRequest()加载它们.然后我看到其他人有同样的想法:
http://webreflection.blogspot.com/2010/09/fragment-and-vertex-shaders-my-way-to.html
我喜欢使用.c文件的建议,因为这为GLSL提供了语法高亮和其他编辑器便利.
但是上述方法的问题是(据我所知)XMLHttpRequest()在开发和测试WebGL应用程序时无法加载本地.c文件 - 即在客户端.但是在此过程中继续将其上传到服务器是很麻烦的.
因此,如果我想将着色器保留在html文件之外,那么将它们作为字符串嵌入代码中是唯一的选择吗?但这会使编写和调试变得困难......
我很感激有关在WebGL应用程序中管理多个GLSL着色器的任何建议.
问候
编辑(2011年5月5日)
由于我使用Mac进行开发,我决定启用Apache服务器,并将我的webgl代码放在http:// localhost/~username /下.这避免了在开发期间禁用文件:协议的问题.现在javascript文件加载代码在本地工作,因为使用了http:而不是file:.我以为我会把它放在这里以防万一有人发现它有用.
我在Mathematica中实现了一个四叉树.我不熟悉像Mathematica这样的函数式编程语言,我想知道我是否可以通过更好地使用模式来改进它或使其更紧凑.
(我知道我可以通过修剪未使用的节点来优化树,并且可能有更好的数据结构,如用于空间分解的kd树.)
此外,每次添加新点时,我仍然不满意复制整个树/表达式的想法.但我的理解是,对整个表达式进行操作而不修改部分是函数式编程方式.我对这方面的任何澄清表示感谢.
MV
代码
ClearAll[qtMakeNode, qtInsert, insideBox, qtDraw, splitBox, isLeaf, qtbb, qtpt];
(* create a quadtree node *)
qtMakeNode[{{xmin_,ymin_}, {xmax_, ymax_}}] :=
{{}, {}, {}, {}, qtbb[{xmin, ymin}, {xmax, ymax}], {}}
(* is pt inside box? *)
insideBox[pt_, bb_] := If[(pt[[1]] <= bb[[2, 1]]) && (pt[[1]] >= bb[[1, 1]]) &&
(pt[[2]] <= bb[[2, 2]]) && (pt[[2]] >= bb[[1, 2]]),
True, False]
(* split bounding box into 4 children *)
splitBox[{{xmin_,ymin_}, {xmax_, ymax_}}] := {
{{xmin, (ymin+ymax)/2}, {(xmin+xmax)/2, …Run Code Online (Sandbox Code Playgroud) 在我的iOS应用程序(针对iPad)中,我想使用非幂(NPT)纹理.我的GL_VERSION查询返回"OpenGL ES 2.0 APPLE".根据规范,它应该支持NPT纹理,但是一个简单的测试表明我需要在纹理显示之前将纹理大小调整为2 ^ N.
Apple不支持完整的ES 2.0规范吗?我在哪里可以找到不支持的文档?
我使用的是Xcode 4.3.2和iOS 5.1.
编辑:
仔细研究ES 2.0.25规范(第3.8.2节),可以发现NPOT可以满足几个条件.基本上如果我使用下面的设置,我可以加载NPOT纹理:
// use linear filetring
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
// clamp to edge
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
Run Code Online (Sandbox Code Playgroud)
我应该关闭它还是回答我自己的问题?
我无法将投影和模型视图矩阵从我的PyOpenGL代码传递到GLSL着色器中.我的理解是OpenGL矩阵是列专业,但是当我传递投影和模型视图矩阵时,我看不到任何东西.我尝试了矩阵的转置,它适用于模型视图矩阵,但投影矩阵无论如何都不起作用.这是代码:
import OpenGL
from OpenGL.GL import *
from OpenGL.GL.shaders import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
from OpenGL.GLUT.freeglut import *
from OpenGL.arrays import vbo
import numpy, math, sys
strVS = """
attribute vec3 aVert;
uniform mat4 uMVMatrix;
uniform mat4 uPMatrix;
uniform vec4 uColor;
varying vec4 vCol;
void main() {
// option #1 - fails
gl_Position = uPMatrix * uMVMatrix * vec4(aVert, 1.0);
// option #2 - works
gl_Position = vec4(aVert, 1.0);
// set color
vCol = vec4(uColor.rgb, … 我无法理解.dae文件中的几何应该如何加载到iOS SceneKit场景图中.
我知道你可以.dae直接将文件加载到SCNScene中:
// create a new scene
let scene = SCNScene("test.scnassets/test.dae")
Run Code Online (Sandbox Code Playgroud)
我也知道你可以创建一个空的SCNScene并将内置的3D对象作为子节点添加到其中:
let scene = SCNScene()
var sphereNode = SCNNode()
sphereNode.geometry = SCNSphere(radius: 1.0)
scene.rootNode.addChildNode(sphereNode)
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,您可以将.dae文件加载到SCNNode而不是使用内置对象吗?或者是否.dae需要首先将所有文件加载到SCNScene中?
如果后者为真,那么如何将SCNNode对象放在SCNScene下的场景图层次结构中的正确位置?编辑#1:
这对我来说很有用,这是@FlippinFun建议的修改版本.
let url = NSBundle.mainBundle().URLForResource("test.scnassets/test", withExtension: "dae")
let source = SCNSceneSource(URL: url, options: nil)
let block = source.entryWithIdentifier("ID10", withClass: SCNGeometry.self) as SCNGeometry
scene.rootNode.addChildNode(SCNNode(geometry: block))
Run Code Online (Sandbox Code Playgroud)
但也许有更好的方法?以上涉及从.dae树手动加载每个标识符.在我的文件中,有一个节点"SketchUp",子标识符为"ID2"和"ID10".此方法不允许您加载根"SketchUp".(我收到运行时错误.)
我是Android SDK的新手.有没有办法从我的Android应用程序共享文件,以便其他计算机可以使用WiFi访问它?对SMB这样的东西有支持吗?(手机上的Android版本是1.6)谢谢.
我尝试了以下方法:
$ cat args.sh
\#! /Applications/ccl/dx86cl64
(format t "~&~S~&" *args*)
$ ./args.sh
Run Code Online (Sandbox Code Playgroud)
无法加载lisp堆映像 ./args.sh
我可以直接运行lisp罚款:
$ /Applications/ccl/dx86cl64
Welcome to Clozure Common Lisp Version 1.5-r13651 (DarwinX8664)!
?
Run Code Online (Sandbox Code Playgroud)
是否可以编写shell脚本以使用Clozure CL运行lisp代码?我确信我做的事情很傻.
我安装的是:http: //openmcl.clozure.com/
我想为我在iPhone应用程序中显示的UIImage实现"自动关卡"选项.在我尝试自己实现它之前,我想知道我应该使用的API中是否有任何图像处理方法,直方图等.或者我应该抓住底层CGImage并处理它?(我是iPhone开发新手.)
谢谢
MV
我在创建FBO时遇到问题,然后在我的iOS应用程序中将其用作纹理.我在github上传了我的应用程序的精简版,显示了问题.我只是一个空白的屏幕,有一种奇怪的颜色,我从来没有设置过.检查状态显示FBO已成功创建.
https://github.com/glman74/simpleFBO
我已经查看了相关的stackoverflow问题,特别是datenwolf下面的链接,它显示了如何使用GLUT设置FBO,但不使用着色器.我仍然不确定我做错了什么.
https://github.com/datenwolf/codesamples/blob/master/samples/OpenGL/minimalfbo/
我还在这里附上代码的相关部分.在renderFBO方法中,我只是在做清楚.我原本期望在主渲染中渲染多边形时使用这种纯色(绿色)纹理.
FBO设置:
// intialize FBO
- (void)setupFBO
{
fbo_width = 512;
fbo_height = 512;
glGenFramebuffers(1, &fboHandle);
glGenTextures(1, &fboTex);
glGenRenderbuffers(1, &depthBuffer);
glBindFramebuffer(GL_FRAMEBUFFER, fboHandle);
glBindTexture(GL_TEXTURE_2D, fboTex);
glTexImage2D( GL_TEXTURE_2D,
0,
GL_RGBA,
fbo_width, fbo_height,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER_APPLE, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fboTex, 0);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24_OES, fbo_width, fbo_height);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER_APPLE, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
// FBO status check
GLenum status;
status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
switch(status) {
case GL_FRAMEBUFFER_COMPLETE:
NSLog(@"fbo complete");
break;
case GL_FRAMEBUFFER_UNSUPPORTED:
NSLog(@"fbo …Run Code Online (Sandbox Code Playgroud)