在片段着色器中对全屏纹理进行采样的最佳方法是什么,例如延迟渲染器中的g-buffer,或后处理着色器中的场景纹理?
目前我使用以下两种方式:
将屏幕大小作为制服传递给着色器,并从gl_FragCoord
以下位置计算(u,v):
vec2 texCoord = gl_FragCoord.xy / vScreenSize;
vec3 c = texture( tex, texCoord ).rgb;
Run Code Online (Sandbox Code Playgroud)
似乎不是理想的,因为需要划分并且为着色器提供屏幕尺寸是麻烦的.
转换gl_FragCoord.xy
成ivec
并使用texelFetch
:
vec3 c = texelFetch( tex, ivec2(gl_FragCoord.xy), 0 ).rgb;
Run Code Online (Sandbox Code Playgroud)
也正因为从转换不理想float
到int
是必需的.
那么还有更好的方法吗?我真的只想在我的像素着色器绘制的精确点处对缓冲区进行采样.
//编辑:
好吧,根据来自顶点着色器的插值纹理坐标的建议,我设法找出以下代码:
顶点着色器:
#version 150
uniform mat4 im_ModelViewProjectionMatrix;
in vec3 iv_Vertex;
noperspective out vec2 vVertCoord;
void main( void )
{
gl_Position = im_ModelViewProjectionMatrix * vec4(iv_Vertex, 1.0);
vVertCoord = (gl_Position.xy / gl_Position.w) * (0.5) + vec2(0.5);
}
Run Code Online (Sandbox Code Playgroud)
我基本上使用透视分割从剪辑空间位置计算归一化设备坐标(NDC),然后将NDC(范围从[-1,1])映射到区间[0,1].这适用于全屏四边形(即使没有透视分割,因为坐标非常简单).我需要在延迟渲染器中绘制为光几何的任意几何体有一些问题.在顶点着色器中,我输出vVertCoord
为red = …
我只是在Codility,并遇到了一个任务,我无法找到有针对性的O(n)效率的解决方案; 我的解决方案运行O(n2).如果有人能给我一个关于如何让它跑得更快的提示,我会很高兴的.这是任务.
给出了由N个整数组成的非空零索引数组A.
单调对是一对整数(P,Q),使得0≤P≤Q<N且A [P]≤A[Q].
目标是找到其指数最远的monotonic_pair.更确切地说,我们应该最大化Q-P的值.仅找到距离就足够了.
例如,考虑数组A,使得:
A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
Run Code Online (Sandbox Code Playgroud)
有11个monotonic_pairs:(0,0),(0,2),(1,1),(1,2),(1,3),(1,4),(2,2),(3, 3),(3,4),(4,4),(5,5).对中的最大距离是3(1,4).
写一个函数:
class Solution {public int solution(int [] A); }
如果给定N个整数的非空零索引数组A,则返回任何monotonic_pairs中的最大距离.
例如,给定:
A[0] = 5
A[1] = 3
A[2] = 6
A[3] = 3
A[4] = 4
A[5] = 2
Run Code Online (Sandbox Code Playgroud)
该函数应返回3,如上所述.
假使,假设:
N是[1..300,000]范围内的整数; 数组A的每个元素都是[-1,000,000,000..1,000,000,000]范围内的整数.复杂:
预期的最坏情况时间复杂度是O(N); 预期的最坏情况空间复杂度是O(N),超出输入存储(不计入输入参数所需的存储).可以修改输入数组的元素.
我的第一个想法解决方案(在O(n2)中运行):
public static int solution(int[] A) {
int max = 0;
for(int i=0; i<A.length-1; i++) {
for(int j=i+1; …
Run Code Online (Sandbox Code Playgroud) 这两个调用都会发出"hello"警告,但有可能知道它是如何调用的吗?
function Test() {
this.foo = this;
}
Test.prototype.bar = function (value) {
// Check if it was called through foo
alert(value);
}
var test = new Test();
test.foo.bar('hello');
test.bar('hello');
Run Code Online (Sandbox Code Playgroud)
基本上我想知道它是从test还是test.foo调用的.
可能吗?
有没有办法在每个黄瓜功能之前和之后运行特定代码块与某些标签?
由于设置过程非常昂贵,我不想在每个场景之前运行它.
我在xml布局文件中有一个布局.
在运行时,我想创建2个文本视图,然后添加到布局中.
=>我无法通过特定大小为2文本视图设置宽度/高度.
如果我设置MATCH_PARENT
,那没关系.
如果我按任何特定尺寸设置,它只是WRAP_CONTENT
XML布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.androidsnipcode.MainActivity$PlaceholderFragment"
android:orientation="vertical"
android:id="@+id/mylayout">
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
Dimens.xml:
<resources>
<!-- Default screen margins, per the Android Design guidelines. -->
<dimen name="activity_horizontal_margin">16dp</dimen>
<dimen name="activity_vertical_margin">16dp</dimen>
<dimen name="heigh">300dip</dimen>
<dimen name="width">600dip</dimen>
</resources>
Run Code Online (Sandbox Code Playgroud)
Activity.java的onCreate():
LinearLayout layout = (LinearLayout) findViewById(R.id.mylayout);
LinearLayout.LayoutParams layoutparams1 = new LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, R.dimen.heigh);
TextView tv = new TextView(this);
tv.setLayoutParams(layoutparams1);
tv.setText("hello 1");
tv.setBackgroundColor(Color.CYAN);
layout.addView(tv);
LinearLayout.LayoutParams layoutparams2 = new LinearLayout.LayoutParams(
R.dimen.width, LayoutParams.MATCH_PARENT);
TextView tv2 = new TextView(this);
tv2.setLayoutParams(layoutparams2);
tv2.setText("hello 2");
tv2.setBackgroundColor(Color.MAGENTA);
layout.addView(tv2);
Run Code Online (Sandbox Code Playgroud)
屏幕截图:第一个textview的高度和第二个textview的宽度不符合我的预期(它的包装内容不是我特定的大小)
我正在尝试使用多对多方法产品与商店 Product.java具有多对多关系
package models;
@Entity
public class Product extends Model {
@Id
@SequenceGenerator(name="product_gen", sequenceName="product_id_seq", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="product_gen")
@Column(name="id")
public Long id;
@Required
public String name;
@Required
public Float price;
@ManyToMany(cascade = CascadeType.ALL)
public List<Shop> shops = new ArrayList<Shop>();
public Product(String name, float price) {
this.name = name;
this.price = price;
}
public static List<Product> all(){
return find.all();
}
public static Model.Finder<Long, Product> find = new Model.Finder(Long.class, Product.class);
public static Product create(String name,float price) {
Product product = new Product(name, price); …
Run Code Online (Sandbox Code Playgroud) 我有一个我为多维数组创建的javascript对象,见下文:
var myObject = {};
myObject['firstArray'] = ['firstValue', 'secondValue'];
myObject['secondArray'] = ['firstValue', 'secondValue'];
Run Code Online (Sandbox Code Playgroud)
然后我使用JSON stringify函数准备它传递给PHP页面:
arrayToPass = JSON.stringify(myObject);
Run Code Online (Sandbox Code Playgroud)
在PHP页面中,我然后解码对象:
$passedObject = file_get_contents( "php://input" );
$splitObject = json_decode($passedObject);
Run Code Online (Sandbox Code Playgroud)
然后我循环遍历splitObject以提取值:
foreach($splitObject as $array){
echo ($array);
echo"<br>";
foreach($array as $value){
echo $value;
echo "<br>";
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
Array
firstValue
secondValue
Array
firstValue
secondValue
Run Code Online (Sandbox Code Playgroud)
有没有办法让输出显示实际的数组名称而不仅仅是数组,所以结果应该是:
firstArray
firstValue
secondValue
secondArray
firstValue
secondValue
Run Code Online (Sandbox Code Playgroud)
我尝试使用echo key($array)
但只返回0,因为它是一个对象而不是我相信的数组.
有没有办法在Python中创建双进度条?我想在彼此内部运行两个循环.对于每个循环,我想要一个进度条.我的程序看起来像:
import time
for i1 in range(5):
for i2 in range(300):
# do something, e.g. sleep
time.sleep(0.01)
# update upper progress bar
# update lower progress bar
Run Code Online (Sandbox Code Playgroud)
中间某处的输出应该看起来像
50%|############################ |ETA: 0:00:02
80%|################################################## |ETA: 0:00:04
Run Code Online (Sandbox Code Playgroud)
已经存在的非常酷的进度条模块似乎不支持这一点.
Android Lint抱怨assert()
使用,并建议使用BuildConfig.DEBUG条件检查.
我完全理解为什么断言在android上使用是不安全的,但究竟什么是"BuildConfig.DEBUG条件检查"?
如何修改以下示例代码?
Context ctx = getContext();
assert (ctx instanceof FragmentActivity);
fragment_manager = ((FragmentActivity) ctx).getSupportFragmentManager();
Run Code Online (Sandbox Code Playgroud) android ×2
java ×2
javascript ×2
algorithm ×1
arrays ×1
cucumber ×1
ebean ×1
glsl ×1
hook ×1
many-to-many ×1
object ×1
opengl ×1
php ×1
progress-bar ×1
python ×1
ruby ×1
sql-server ×1
triggers ×1