我在上学期为一项任务写了一篇Ray Tracer,并希望继续努力.在赋值中有5种材料(用于对象),我们得到了它们的环境,漫反射,镜面反射和光泽值.我很难找到这些值的列表来在线创建新材料(其中一个也包括折射指数会非常棒)并且想知道是否有人知道这是一个很好的资源.
这是迄今为止我发现的最好的一种,但它没有那么多的材料和具有折射率的材料没有我上面提到的其他值:http://www.nicoptere.net/dump/ materials.html
我从来没有为Ray Tracer做过折射(计划好好学习它),欢迎任何一般建议.
我对C++很新,一直在避免使用指针.从我在网上看到的,我不能返回一个数组,但我可以返回一个指向它的指针.我做了一个小代码来测试它,并想知道这是否是正常/正确的方法:
#include <iostream>
using namespace std;
int* test (int in[5]) {
int* out = in;
return out;
}
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int* pArr = test(arr);
for (int i = 0; i < 5; i++) cout<<pArr[i]<<endl;
cout<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编辑:这似乎并不好.我该怎么改写呢?
int* test (int a[5], int b[5]) {
int c[5];
for (int i = 0; i < 5; i++) c[i] = a[i]+b[i];
int* out = c;
return out;
}
Run Code Online (Sandbox Code Playgroud) 我正在玩一些语法,发现一些奇怪的编译器规则,想知道是什么原因
C不会编译这个,但C++会:
switch (argc) {
case 0:
int foo;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
C和C++都会编译这个:
switch (argc) {
case 0:
; int foo;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
C将编译这个而不是C++:
switch (argc) {
case 0:
; int foo = 0;
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
gcc -v是gcc version 4.9.3 (MacPorts gcc49 4.9.3_0)如果它很重要.我意识到解决方案是case 0:用大括号包装内容,但我对编译错误的推理更感兴趣
我正在写一个光线追踪器,并且该过程的一部分正在发射可能会或可能不会撞击物体的光线(几何物体).如果没有发生交叉(交叉是虚构的),描述对象的许多方程自然地返回NaN但是如果没有交叉发生则不是所有对象都返回NaN.
我知道如果没有发生交叉,我可以强制返回sqrt(-1),但我想知道是否有办法以较便宜的方式返回它.
我一直在拼凑在线示例,以制作Mandelbrot Set片段着色器.顶点着色器基本上什么都不做,它分配gl_Position并且片段着色器做一些数学计算图像.
但是,我有一些#define我想用JavaScript控制变量替换的s,我不知道如何做到这一点.如果一个例子可以显示如何#define MAX_ITERATIONS 200用下面的代码中的JavaScript指定变量替换,我可能会弄清楚其余的.我相信我需要指定一个uniform或者varying不确定如何管理从JavaScript到GLSL的通信.
另外我不明白aPositionJavaScript和顶点着色器之间的工作原理,我所拥有的与示例基本相同.
JavaScript,我认为只init()对SO读者有用,其余部分如果需要发布:
var canvas, gl, shaderProgram;
function draw() {
window.requestAnimationFrame(draw, canvas);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
}
function init() {
canvas = document.getElementById("theCanvas");
gl = initGl(canvas);
if (!gl) {
alert("Could not initialize WebGL");
return;
}
shaderProgram = initShaders();
if (!shaderProgram) {
alert("Could not initialize shaders");
return;
}
var vertexBuffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
gl.bufferData(
gl.ARRAY_BUFFER,
new Float32Array([
-1.0, -1.0,
1.0, -1.0, …Run Code Online (Sandbox Code Playgroud) 我想在此之后建立Clang:http://clang.llvm.org/get_started.html
在第6步,该命令../llvm/configure运行一系列检查,一个告诉我:
checking whether Clang will select a modern C++ standard library... no
configure: error:
We detected a missing feature in the standard C++ library that was known to be
missing in libstdc++4.6 and implemented in libstdc++4.7. There are numerous
C++11 problems with 4.6's library, and we don't support GCCs or libstdc++ older
than 4.7. You will need to update your system and ensure Clang uses the newer
standard library.
If this error is incorrect …Run Code Online (Sandbox Code Playgroud) 我正在研究某人的代码,并且遇到了相同的代码:
for (int i = 0; i < someVolatileMember; i++) {
// Removed for SO
}
Run Code Online (Sandbox Code Playgroud)
在哪里someVolatileMember定义如下:
private volatile int someVolatileMember;
Run Code Online (Sandbox Code Playgroud)
如果某个线程A正在运行for循环而另一个线程B写入,someVolatileMember那么我假设要执行的迭代次数会发生变化,而线程A正在运行不太好的循环.我认为这会解决它:
final int someLocalVar = someVolatileMember;
for (int i = 0; i < someLocalVar; i++) {
// Removed for SO
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
someVolatileMember我一直在查找正则表达式教程试图了解它们并且正在享受此链接中的教程直到这个问题:http://regexone.com/lesson/12
我似乎无法弄清楚"匹配"和"捕获"之间的区别是什么.我写的任何内容似乎都没有选择"Capture"部分下的文本(甚至不是.*).
编辑:以下是教程让我感到困惑的例子:(.* (.*))被认为是正确的而(.* .*)不是.这是教程的问题还是我不理解的东西?
我一直在浏览LLVM文档/ Stack Overflow并且无法弄清楚如何将整数全局变量初始化为0(第一次使用LLVM).这是我目前的一些代码:
TheModule = (argc > 1) ? new Module(argv[1], Context) : new Module("Filename", Context);
// Unrelated code
// currentGlobal->id is just a string
TheModule->getOrInsertGlobal(currentGlobal->id, Builder.getInt32Ty());
llvm::GlobalVariable* gVar = TheModule->getNamedGlobal(currentGlobal->id);
gVar->setLinkage(llvm::GlobalValue::CommonLinkage);
gVar->setAlignment(4);
// What replaces "???" below?
//gVar->setInitializer(???);
Run Code Online (Sandbox Code Playgroud)
这几乎可以实现我想要的,它可以产生的输出示例:
@a = common global i32, align 4
@b = common global i32, align 4
@c = common global i32, align 4
Run Code Online (Sandbox Code Playgroud)
但是,clang foo.c -S -emit-llvm产生我想要的东西:
@a = common global i32 0, align 4
@b = common global i32 …Run Code Online (Sandbox Code Playgroud) 我有一个已知宽度,776像素和三列的表.第三列具有已知宽度,216像素,但另外两列没有已知宽度.我想要的行为是第二列的宽度与其子元素相同.无论剩下多少宽度,776 - 216 - 2nd,都是第一列的宽度.
我找到了一个示例,它设置应该将其宽度最小化为1像素的列的宽度.这似乎有效,但似乎它是一个黑客,我不明白为什么它的工作原理.是否有更"标准"的方法来实现相同的结果?
这是我的带有内联CSS的HTML作为示例:
<table style="width:776px; height:48px;">
<tr>
<td style="height:48px;">
<!-- Note: Setting font size to zero prevents white space from contributing to an inline block element's width -->
<div style="background:#f0f0f0; border:solid 2px #808080; font-size:0; margin-left:8px; text-align:center;">
<a href="#"><h3 style="display:inline-block; font-size:20px; line-height:28px; padding:8px;">Art</h3></a>
<a href="#"><h3 style="display:inline-block; font-size:20px; line-height:28px; padding:8px;">Events</h3></a>
<a href="#"><h3 style="display:inline-block; font-size:20px; line-height:28px; padding:8px;">Papers</h3></a>
<a href="#"><h3 style="display:inline-block; font-size:20px; line-height:28px; padding:8px;">Research</h3></a>
</div>
</td>
<!-- Note: Setting width to one pixel removes horizontal spacing -->
<td style="vertical-align:middle; width:1px; …Run Code Online (Sandbox Code Playgroud)