小编gma*_*man的帖子

为什么GL将'gl_Position`除以W而不是让你自己做?

注意:我理解基本的数学.我理解perspective各种数学库中的典型函数会产生一个矩阵,它将-zNear到-zFar的z值转换回-1到+1,但前提是结果除以w

具体的问题是GPU为你做了什么,而不是你必须自己做?

换句话说,可以说的GPU没有神奇划分gl_Positiongl_Position.w,并且代替你不得不做手工,如

attribute vec4 position;
uniform mat4 worldViewProjection;

void main() {
  gl_Position = worldViewProjection * position;

  // imaginary version of GL where we must divide by W ourselves
  gl_Position /= gl_Position.w;
}
Run Code Online (Sandbox Code Playgroud)

由于这个原因,这个想象中的GL会打破什么?它是否有效或是否有一些关于在被除以之前传递值的东西,它w为GPU提供了额外需要的信息?

请注意,如果我实际执行此操作,纹理映射透视图会中断.

"use strict";
var m4 = twgl.m4;
var gl = twgl.getWebGLContext(document.getElementById("c"));
var programInfo = twgl.createProgramInfo(gl, ["vs", "fs"]);

var bufferInfo = twgl.primitives.createCubeBufferInfo(gl, 2);

var tex = twgl.createTexture(gl, {
  min: gl.NEAREST,
  mag: gl.NEAREST,
  src: [
    255, 255, 255, 255, …
Run Code Online (Sandbox Code Playgroud)

opengl opengl-es glsl

19
推荐指数
2
解决办法
3254
查看次数

在git中合并rebase的优势是什么?

本文中,作者使用此图解释了变基:

alt text http://eagain.net/articles/git-for-computer-scientists/git-history.7.png

Rebase:如果您还没有发布您的分支机构,或者已经清楚地告知其他人不应该以此为基础,那么您可以选择其他方式.您可以重新分支您的分支,而不是合并,您的提交将被另一个具有不同父级的提交所取代,并且您的分支将被移动到那里.

而正常的合并将如下所示:

alt text http://eagain.net/articles/git-for-computer-scientists/git-history.5.png

所以,如果你重订,你只是失去了一个历史状态(这将是垃圾回收在将来某个时候).那么,为什么有人想要做一次变革呢?我在这里错过了什么?

git algorithm version-control dvcs

18
推荐指数
1
解决办法
4443
查看次数

如何修复Npm丢失的对等依赖项

我不知道如何解决以下对等依赖性错误.

mondwan@mondwan-All-Series:~/Documents/git/py-cli_build_tools$ sudo npm -g list | grep eslint    
??? babel-eslint@7.1.1
??? eslint@3.12.2
??? eslint-config-airbnb@13.0.0
? ??? eslint-config-airbnb-base@10.0.1
??? eslint-config-eslint@3.0.0
??? eslint-plugin-import@2.2.0
? ??? eslint-import-resolver-node@0.2.3
? ??? eslint-module-utils@2.0.0
??? UNMET PEER DEPENDENCY eslint-plugin-jsx-a11y@3.0.2
??? eslint-plugin-react@6.8.0
npm ERR! peer dep missing: eslint-plugin-jsx-a11y@^2.2.3, required by eslint-config-airbnb@13.0.0
Run Code Online (Sandbox Code Playgroud)

如你所见,我已安装了eslint-plugin-jsx-a11y@3.0.2绝对满足的^2.2.3要求

eslint-config-airbnb.但是,它显示了这样的错误消息.有什么想法解决这个问题吗?

npm npm-install npm-update

18
推荐指数
1
解决办法
2万
查看次数

Three.js - 什么是PlaneBufferGeometry

什么是PlaneBufferGeometry以及它与PlaneGeometry的不同之处?(R69)

javascript three.js

17
推荐指数
2
解决办法
9853
查看次数

删除HTML5画布上以前绘制的线条

为了使用HTML5画布,我决定制作一个绘制模拟表盘的应用程序.一切都很好,除了旧的线条没有像我期望的那样被抹去.我已经包含了下面的部分代码 - DrawHands()每秒调用一次:

var hoursPoint = new Object();
var minutesPoint = new Object();
var secondsPoint = new Object();

function drawHands()
{
    var now = new Date();

    drawLine(centerX, centerY, secondsPoint.X, secondsPoint.Y, "white", 1);
    var seconds = now.getSeconds();
    secondsPoint = getOtherEndOfLine(centerX, centerY, 2 * Math.PI / 60 * seconds, 0.75 * radius);
    drawLine(centerX, centerY, secondsPoint.X, secondsPoint.Y, "black", 1);

    drawLine(centerX, centerY, minutesPoint.X, minutesPoint.Y, "white", 3);
    var minutes = now.getMinutes();
    minutesPoint = getOtherEndOfLine(centerX, centerY, 2 * Math.PI / 60 * minutes, 0.75 * radius); …
Run Code Online (Sandbox Code Playgroud)

html javascript html5-canvas

15
推荐指数
3
解决办法
2万
查看次数

我可以在three.js中隐藏网格的面吗?

我想在运行时使网格的一部分不可见.我可以将这些部件设置为不可见/透明,例如通过更改单个面的属性吗?网格本身仅使用一种材质.


示例性说明作为编辑理解这个问题:设想一个目(这里为20个顶点的几何形状),其中的四个顶点每个四边形积聚一个Face4.现在,网格的某些部分应该是不可见的(这里两个面是不可见的).

例

javascript mesh three.js

14
推荐指数
1
解决办法
7097
查看次数

将模型从3dStudioMax导入THREE.js

我知道THREE.js有来自各种3D图形格式的导入器.

是否有适合显示在3dStudioMax中创建的模型的导入程序?如果没有,有没有办法将一个3dStudioMax模型转换成可以在THREE.js中导入的东西?

3d 3dsmax three.js

13
推荐指数
2
解决办法
2万
查看次数

将文本拆分为页面并单独显示(HTML5)

假设我们有一个像罗密欧与朱丽叶这样的长文本,我们想在一个简单的电子阅读器中展示它(没有动画,只有页面和自定义字体大小).有什么方法可以得到这个?

到目前为止我想出了什么:

  • 使用css3列,可以将整个文本加载到内存样式中,使得单个列占用整个页面的大小.这样做非常难以控制,需要将整个文本加载到内存中.
  • 使用css3区域(在任何主要浏览器中都不支持)将构成与先前解决方案相同的基本概念,主要区别在于它不会难以控制(因为每个"列"都是自包含元素).
  • 在画布上绘制文本可以让您准确知道文本的结束位置,从而根据该页面绘制下一页.其中一个优点是您只需要将所有文本加载到当前页面(仍然很糟糕,但更好).缺点是文本无法与之交互(如选择文本).
  • 将每个单词放在一个元素中,并为每个元素赋予一个唯一的id(或在javascript中保留一个逻辑引用),然后使用它document.elementFromPoint来查找页面上最后一个元素(word)并从该单词向前显示下一页.尽管这是唯一对我来说看起来很实际的东西,但由此产生的开销必须是巨大的.

然而,这些似乎都没有被接受(首先没有给予足够的控制以使其工作,第二个尚未得到支持,第三个是艰难的,没有文本选择而第四个给出了荒谬的开销),所以任何好的方法我尚未想到,或者解决上述方法的一个或多个缺点的方法(是的,我知道这是一个相当开放的问题,但它越开放,产生任何相关答案的机会越高)?

html javascript css html5-canvas

13
推荐指数
4
解决办法
1万
查看次数

为什么HLSL有语义?

在HLSL中,我必须使用语义将信息从顶点着色器传递到片段着色器.在GLSL中,不需要语义.语义的客观利益是什么?

示例:GLSL

顶点着色器

varying vec4 foo
varying vec4 bar;

void main() {
  ...
  foo = ...
  bar = ...
}
Run Code Online (Sandbox Code Playgroud)

片段着色器

varying vec4 foo
varying vec4 bar;

void main() {
  gl_FragColor = foo * bar;
}
Run Code Online (Sandbox Code Playgroud)

示例:HLSL

顶点着色器

struct VS_OUTPUT
{
   float4  foo : TEXCOORD3;
   float4  bar : COLOR2;
}

VS_OUTPUT whatever()
{
  VS_OUTPUT out;

  out.foo = ...
  out.bar = ...

  return out;
}
Run Code Online (Sandbox Code Playgroud)

像素着色器

void main(float4 foo : TEXCOORD3,
          float4 bar : COLOR2) : COLOR
{
    return foo * …
Run Code Online (Sandbox Code Playgroud)

glsl hlsl

13
推荐指数
1
解决办法
4712
查看次数

以正确的顺序调用函数的零成本非宏解决方案

我有一个代码库,其中需要在某些独特函数之前和之后按顺序调用一些常见函数

例如:

common1();
common2();
unique();   // note: unique returns void but can have any number of arguments
common3();
common4();
Run Code Online (Sandbox Code Playgroud)

问题是,每当unique创建新的功能或commonX添加更多功能时,代码中需要此模式的每个位置都必须匹配。

一种解决方案是使用宏

#define DO_UNIQUE_CORRECTLY(unique_code_block) \
  common1();           \
  common2();           \
  unique_code_block    \
  common3();           \
  commont();           \

...

void someFunc1(arg1) {
  DO_UNIQUE_CORRECTLY({
    unique1(arg1);
  });
}

void someFunc2(arg1, arg2) {
  DO_UNIQUE_CORRECTLY({
    unique2(arg1, arg2);
  });
}
Run Code Online (Sandbox Code Playgroud)

这样可行。问题是:是否有一种非宏 C++ 方法可以零开销阻止错误并且使用起来不会过于冗长。

注意:如果不明显,“不过分冗长”的要求意味着我调用的函数可能有很多类型非常大的参数。必须复制并粘贴类型列表=“过于冗长”

我知道的一种解决方案是这样的

class Helper {
  Helper() {
    common1();
    common2();
  }
  ~Helper() {
    common3();
    common4();
  }
}

void someFunc1(arg1) …
Run Code Online (Sandbox Code Playgroud)

c++

13
推荐指数
1
解决办法
676
查看次数